
MySQL-python连接MySQL数据库问题,总是抛异常。
系统win764位系统,Python2.7版本,同样64位,MySQL-python1.2.364位。测试代码#-*-coding:utf-8-*-importsys,M...
系统win7 64位系统,Python2.7版本,同样64位,MySQL-python1.2.3 64位。测试代码
# -*- coding: utf-8 -*-
import sys,MySQLdb,threading,random,time
reload(sys)
sys.setdefaultencoding('utf-8')
def test():
for az in range(1,100):
time.sleep(random.randint(1,5))
cur1.execute('insert into test1 (test1)values (%s)', str(random.randint(1,100)))
conn = MySQLdb.connect(host='localhost', user='test', passwd='test', db='test1')
conn.ping(True)
cur1 = conn.cursor()
th=[]
for a in range(50):
th.append(threading.Thread(target=test,args=()))
for aa in th:
aa.start()
for aaa in th:
aaa.join()
抛出的异常
Exception in thread Thread-5:
Traceback (most recent call last):
File "D:\python\lib\threading.py", line 801, in __bootstrap_inner
self.run()
File "D:\python\lib\threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "G:/source/python/test1.py", line 10, in test
cur1.execute('insert into test1 (test1)values (%s)', str(random.randint(1,100)))
File "D:\python\lib\site-packages\MySQLdb\cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "D:\python\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (2013, 'Lost connection to MySQL server during query')
不一定是哪个线程抛,但是都是一样的异常OperationalError: (2013, 'Lost connection to MySQL server during query')这句话,网上说的改数据库配置文件的方法都试过了,木有用。MySQL-python最新版还没有64位的,源码还编译失败、请问这个应该怎么处理? 展开
# -*- coding: utf-8 -*-
import sys,MySQLdb,threading,random,time
reload(sys)
sys.setdefaultencoding('utf-8')
def test():
for az in range(1,100):
time.sleep(random.randint(1,5))
cur1.execute('insert into test1 (test1)values (%s)', str(random.randint(1,100)))
conn = MySQLdb.connect(host='localhost', user='test', passwd='test', db='test1')
conn.ping(True)
cur1 = conn.cursor()
th=[]
for a in range(50):
th.append(threading.Thread(target=test,args=()))
for aa in th:
aa.start()
for aaa in th:
aaa.join()
抛出的异常
Exception in thread Thread-5:
Traceback (most recent call last):
File "D:\python\lib\threading.py", line 801, in __bootstrap_inner
self.run()
File "D:\python\lib\threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "G:/source/python/test1.py", line 10, in test
cur1.execute('insert into test1 (test1)values (%s)', str(random.randint(1,100)))
File "D:\python\lib\site-packages\MySQLdb\cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "D:\python\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (2013, 'Lost connection to MySQL server during query')
不一定是哪个线程抛,但是都是一样的异常OperationalError: (2013, 'Lost connection to MySQL server during query')这句话,网上说的改数据库配置文件的方法都试过了,木有用。MySQL-python最新版还没有64位的,源码还编译失败、请问这个应该怎么处理? 展开
1个回答
展开全部
不要刚开始学多线程编程就这样玩。connection 和 cursor 都不是线程安全的。
如果测试环境用多个线程,每个线程要在线程里面获取自己的 connection,然后从这个connection 获取 cursor.
如果生产环境用多个线程,建议使用线程安全的连接池。
如果测试环境用多个线程,每个线程要在线程里面获取自己的 connection,然后从这个connection 获取 cursor.
如果生产环境用多个线程,建议使用线程安全的连接池。
更多追问追答
追问
我试过每个线程获取自己的连接,还是抛同样的异常。既然是线程不安全的,那加锁可不可以呢
追答
上代码。每个线程获取自己的连接不会抛异常的,估计是你的写法有问题。
资源不共享的时候,是不需要加锁的。如果你共享一个连接,可以加锁,但是多线程就失去了意义,还不如直接单线程循环。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询