日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了FlASK+PyMySQL給出錯誤,沒有屬性'setTimeout'的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

幾天以來,我在我的Flask站網站上時不時地出現此錯誤

[Sat Sep 14 00:04:31.016107 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/__init__.py", line 1612, in showArticleTitlePage
[Sat Sep 14 00:04:31.016119 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     language = session['locale'])
[Sat Sep 14 00:04:31.016130 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/cardsrealm/SQL.py", line 1376, in get_articles_before
[Sat Sep 14 00:04:31.016146 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     cursor.execute(query, t)
[Sat Sep 14 00:04:31.016176 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute
[Sat Sep 14 00:04:31.016188 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     result = self._query(query)
[Sat Sep 14 00:04:31.016198 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/venv/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query
[Sat Sep 14 00:04:31.016209 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     conn.query(q)
[Sat Sep 14 00:04:31.016219 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/venv/lib/python3.6/site-packages/pymysql/connections.py", line 517, in query
[Sat Sep 14 00:04:31.016230 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     self._affected_rows = self._read_query_result(unbuffered=unbuffered)
[Sat Sep 14 00:04:31.016241 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/venv/lib/python3.6/site-packages/pymysql/connections.py", line 732, in _read_query_result
[Sat Sep 14 00:04:31.016251 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     result.read()
[Sat Sep 14 00:04:31.016262 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/venv/lib/python3.6/site-packages/pymysql/connections.py", line 1075, in read
[Sat Sep 14 00:04:31.016273 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     first_packet = self.connection._read_packet()
[Sat Sep 14 00:04:31.016297 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/venv/lib/python3.6/site-packages/pymysql/connections.py", line 674, in _read_packet
[Sat Sep 14 00:04:31.016310 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     recv_data = self._read_bytes(bytes_to_read)
[Sat Sep 14 00:04:31.016321 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]   File "/var/www/xxxx/venv/lib/python3.6/site-packages/pymysql/connections.py", line 688, in _read_bytes
[Sat Sep 14 00:04:31.016332 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013]     self._sock.settimeout(self._read_timeout)
[Sat Sep 14 00:04:31.016342 2019] [wsgi:error] [pid 4693:tid 140670017648384] [remote 66.249.66.44:60013] AttributeError: 'NoneType' object has no attribute 'settimeout'

此setTimeout時有發生。我注意到有人說我應該連接并關閉連接以使其成為單線程安全。

self.conn = self.create_connection()
cursor = self.conn.cursor()
query = ''' SELECT MY QUERY '''.format(self.xxxColumn, self.xxxColumn)
cursor.execute(query, t)
result = cursor.fetchall() 
cursor.close()
self.close_connection()

上面顯示了我是如何處理它的。我在我的SQL中添加了以下內容:

connect_timeout = 200
read_timeout = 200
write_timeout = 200
max_allowed_packet = 1073741824

但是我仍然有這個錯誤!

推薦答案

我遇到了與您相同的錯誤。

我在代碼中使用mysqlpool

DB_MIN_CACHED = 10
DB_MAX_CACHED = 10
DB_MAX_SHARED = 20
DB_MAX_CONNECYIONS = 150
DB_BLOCKING = True
DB_MAX_USAGE = 0
DB_SET_SESSION = None
DB_CREATOR = pymysql


import dbutils
from dbutils.pooled_db import PooledDB

import pymysql, os, configparser
from pymysql.cursors import DictCursor


class BasePymysqlPool(object):
    def __init__(self, envconfig):
        self.DB_HOST = envconfig.DB_HOST
        self.DB_PORT = envconfig.DB_PORT
        self.DB_DATABASE = envconfig.DB_DATABASE
        self.DB_USER = envconfig.DB_USER
        self.DB_PASSWORD = envconfig.DB_PASSWORD
        self.CHARSET = envconfig.CHARSET

        self.DB_MIN_CACHED = envconfig.DB_MIN_CACHED
        self.DB_MAX_CACHED = envconfig.DB_MAX_CACHED
        self.DB_MAX_SHARED = envconfig.DB_MAX_SHARED
        self.DB_MAX_CONNECYIONS = envconfig.DB_MAX_CONNECYIONS
        self.DB_BLOCKING = envconfig.DB_BLOCKING
        self.DB_MAX_USAGE = envconfig.DB_MAX_USAGE
        self.DB_SET_SESSION = envconfig.DB_SET_SESSION
        self.DB_CREATOR = envconfig.DB_CREATOR

class MyPymysqlPool(BasePymysqlPool):

    __pool = None

    def __init__(self, conf_env=None):
        self.conf = conf_env
        super(MyPymysqlPool, self).__init__(self.conf)
        self._conn = self.__getConn()
        self._cursor = self._conn.cursor()

    def __getConn(self):
        if MyPymysqlPool.__pool is None:
            __pool = PooledDB(creator=self.DB_CREATOR,
                          mincached=self.DB_MIN_CACHED,
                          maxcached=self.DB_MAX_CACHED,
                          host=self.DB_HOST,
                          port=self.DB_PORT,
                          user=self.DB_USER,
                          passwd=self.DB_PASSWORD,
                          db=self.DB_DATABASE,
                          use_unicode=False,
                          charset=self.CHARSET,
                          cursorclass=DictCursor)
        return __pool.connection()

    def getconn(self):
        self._conn = self.__getConn()
        self._cursor = self._conn.cursor()
    
    def getOne(self, sql, param=None):
        if param is None:
            count = self._cursor.execute(sql)
        else:
            count = self._cursor.execute(sql, param)
        if count > 0:
            result = self._cursor.fetchone()
        else:
            result = False
        return result
    
    def __query(self, sql, param=None):
        if param is None:
            count = self._cursor.execute(sql)
        else:
            count = self._cursor.execute(sql, param)
        return count
    
    def update(self, sql, param=None):
        return self.__query(sql, param)

    def dispose(self, isEnd=1):
        if isEnd == 1:
            self.end('commit')
        else:
            self.end('rollback')
        self._cursor.close()
        self._conn.close()

    def end(self, option='commit'):
        if option == 'commit':
            self._conn.commit()
        else:
            self._conn.rollback()


mysqlhelper= MyPymysqlPool(config_db)
sql = '''select md5_id from queryresult
 where businessid = %s and md5_id = %s;
 '''
mysqlhelper.getconn()
result_db_num = mysqlhelper.update(sql, [businessid, md5_id])
mysqlhelper.end()
mysqlhelper.dispose()

我嘗試將DB_MAX_CONNECYIONS=100設置為DB_MAX_CONNECYIONS=150,但似乎不起作用。

我注意到,要求越少,錯誤就越少。
所以,我用鎖來解決這個問題。

import threading

lock = threading.Lock()

lock.acquire()
curos.excure(command,data)
lock.release()

在我的代碼中:

lock.acquire()
mysqlhelper.getconn()
result_db_num = mysqlhelper.update(sql, [businessid, md5_id])
mysqlhelper.end()
mysqlhelper.dispose()
lock.release()

那么,完成!

這篇關于FlASK+PyMySQL給出錯誤,沒有屬性'setTimeout'的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:errorFlask+PyMySQLgivingerrornoattribute'settimeout' exception
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定