mysql實現長連線(解決10054錯誤)

2021-10-01 23:41:39 字數 2743 閱讀 9657

這幾天自己寫了乙個python天天薅某個境外**的羊毛,執行過程中會往mysql中寫入資料。昨天**跑了一下午突然報錯了:

pymysql.err.operationalerror: (2013, 'lost connection to mysql server during query ([winerror 10054])

原因是mysql持久化鏈結保持時間為8小時(28800秒),過期後斷開連。如果資料庫沒有新建連線,就會報這個錯誤。[參考文獻]

#! /usr/bin/python

# coding=utf-8

try:

import mysqldb as mysql

except

:#python3不支援mysqldb

import pymysql as mysql

import time

class

mysql

:def

__init__

(self,

host ='',

user ='',

passwd ='',

db ='',

port =

3306

, charset =

'utf8'):

self.host = host

self.host = host

self.user = user

self.passwd = passwd

self.db = db

self.port = port

self.charset= charset

self.conn =

none

self._conn(

)def

_conn

(self)

:try

: self.conn = mysql.connection(host = self.host, user = self.user, passwd = self.passwd, db = self.db, port = self.port , charset = self.charset)

print

("資料庫連線成功"

)return

true

except exception as e:

print

("資料庫連線失敗:"

+str

(e))

return

false

#通過ping()實現資料庫的長連線

def_reconn

(self,num =

28800

,stime =3)

: _number =

0 _status =

true

while _status and _number <= num:

try:

#ping校驗連線是否異常

self.conn.ping(

) _status =

false

except

:print

("資料庫斷開連線,重連"

)if self._conn()==

true

: _status =

false

break

_number +=

1 time.sleep(stime)

defquerry

(self,sql)

:try

: self._reconn(

) self.cursor = self.conn.cursor(

) self.cursor.execute(sql)

results = self.cursor.fetchall(

) self.cursor.close(

)return results;

except exception as e:

print

("querry異常:"

+str

(e))

return

none

;def

insert

(self,sql,param)

:try

: self._reconn(

) self.cursor = self.conn.cursor(

) res = self.cursor.execute(sql,param)

; self.conn.commit();

self.cursor.close(

)return res;

except exception as e:

self.conn.rollback();

print

("insert異常:"

+str

(e))

return

false

;def

close

(self)

: self._reconn(

) self.conn.close(

);

mysql 長連線 聊天室 mysql長連線

長連線是幹嘛的 它是做連線復用的 在openresty中的lua resty mysql 裡 connect方法去連線mysql時會去ngx lua cosocket連線池中尋找是否有可用連線 如果有就直接復用 如果沒有就與mysql建立新連線,連線成功後立即將這個連線放入ngx lua cosoc...

PHP長連線實現

每次我們訪問php指令碼的時候,都是當所有的php指令碼執行完成後,我們才得到返回結果。如果我們需要乙個指令碼持續的執行,那麼我們就要通過php長連線的方式,來達到執行目的。每個php指令碼都限制了執行時間,所以我們需要通過 set time limit 來設定乙個指令碼的執行時間為無限長 然後使用...

Ajax 長連線實現

反轉ajax實質上是一種概念 能夠從伺服器傳送到客戶端的資料。在乙個標準的http ajax請求,資料傳送到伺服器,使伺服器可以傳送事件給客戶端 低延遲通訊 長輪詢模式涉及的技術,開啟乙個連線。連線是由伺服器保持開放,並,只要事件發生時,響應承諾和關閉連線。然後,乙個新的長輪詢連線立即重新開啟,等待...