python - 多线程中mysql插入出错
问题描述
在写爬虫中,我要把爬取到的数据存到数据库中.每一个页面里边有很多条目,比如一个人的访客可能有很多个,于是插入卸载循环中,
try: sql_visitor=’INSERT INTO visitor (ownername,owneruid,visitorname,visitoruid,visittime) VALUE ('%s',%d,'%s',%d,'%s')’%(ownername,owneruid,visitorname,visitoruid,visitortime) print sql_visitor self.cursor.execute(sql_visitor) self.connect.commit()except Exception as e: print e
一个页面一个线程,嫌弃慢的我开了5个
max_threads=5while uid < 8000000 or threadlist: for thread1 in threadlist:if not thread1.is_alive(): threadlist.remove(thread1) while len(threadlist) < max_threads and uid < 8000000:uid+=1thread2=threading.Thread(target=run,args=(uid,))thread2.setDaemon(True)thread2.start()threadlist.append(thread2) time.sleep(5)
运行很顺利:
INSERT INTO visitor (ownername,owneruid,visitorname,visitoruid,visittime) VALUE ('huosai7',4893,'Liang2017',7252799,'2017-5-22 21:06')INSERT INTO personalinfo (ownername,owneruid,jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixianshijian,shengri,xingbie) VALUE('huosai7',4893,0,0,0,0,0,0,0,0,0,0,0,0,'','','2100-01-01 12:00','2100-01-01 12:00','2100-01-01 12:00','2004-1-3 19:28',0,'2100-01-01 12:00',0)INSERT INTO visitor (ownername,owneruid,visitorname,visitoruid,visittime) VALUE ('龙乐',4894,'Liang2017',7252799,'2017-5-22 21:06')(1062, 'Duplicate entry ’4894-7252799-2017-05-22 21:06:00’ for key ’PRIMARY’')INSERT INTO personalinfo (ownername,owneruid,jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixianshijian,shengri,xingbie) VALUE('龙乐',4894,0,0,0,0,0,0,0,0,0,0,0,0,'','','2100-01-01 12:00','2100-01-01 12:00','2100-01-01 12:00','2004-1-3 20:21',0,'2100-01-01 12:00',0).......
于是我将max_thread设置成10,于是结果如下:
INSERT INTO visitor (ownername,owneruid,visitorname,visitoruid,visittime) VALUE ('xiao61',4889,'Liang2017',7252799,'2017-5-22 21:06')
(2006, ’MySQL server has gone away’)
INSERT INTO personalinfo (ownername,owneruid,jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixianshijian,shengri,xingbie) VALUE('xiao61',4889,0,0,0,0,0,0,0,0,0,0,0,0,'','','2100-01-01 12:00','2100-01-01 12:00','2100-01-01 12:00','2004-1-3 15:56',0,'2100-01-01 12:00',0)
(2006, ’MySQL server has gone away’)
INSERT INTO visitor (ownername,owneruid,visitorname,visitoruid,visittime) VALUE ('糊涂酷酷熊',4897,'Liang2017',7252799,'2017-5-22 21:06')
(2006, ’MySQL server has gone away’)
INSERT INTO personalinfo (ownername,owneruid,jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixianshijian,shengri,xingbie) VALUE('糊涂酷酷熊',4897,611,0,1655,0,0,2,0,0,0,34,0,0,'','','2007-3-27 00:37','2007-3-27 00:37','2007-3-27 00:37','2004-1-3 21:08',0,'2100-01-01 12:00',1)
(2006, ’MySQL server has gone away’).......
可以看出2006出来了,然后我将max_thread设置成30,然后结果如下:

就将,够详细吗?不够详细还需要什么只管说!
问题解答
回答1:看这里,我猜你是用的是pymysql,它的线程安全描述为1,对应的pep249里面做了详细的描述:
Threads may share the module, but not connections.
线程可以共享模块但不能共享连接。这也就是说你可能得在每个线程中创建一个连接。
呐~为什么不用orm来做呢?
相关文章:
1. 为什么span的color非要内联样式才起作用?2. angular.js - angular-ui-bootstrap 报错无法使用?3. javascript - swiper.js嵌套了swiper 初始设置不能向下一个滑动 结束后重新初始4. docker - 如何修改运行中容器的配置5. javascript - 关于<a>元素与<input>元素的JS事件运行问题6. 在cmd下进入mysql数据库,可以输入中文,但是查看表信息,不显示中文,是怎么回事,怎新手,请老师7. 求救一下,用新版的phpstudy,数据库过段时间会消失是什么情况?8. 高并发写入和更新mysql9. 老师,请问我打开browsersync出现这个问题怎么解决啊?10. html5 - H5做的手机分享页微信更新后,分享出去不再默认显示第一个图 作为缩略图

网公网安备