python - 多線程中mysql插入出錯
問題描述
在寫爬蟲中,我要把爬取到的數(shù)據(jù)存到數(shù)據(jù)庫中.每一個頁面里邊有很多條目,比如一個人的訪客可能有很多個,于是插入卸載循環(huán)中,
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設(shè)置成10,于是結(jié)果如下:
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設(shè)置成30,然后結(jié)果如下:

就將,夠詳細嗎?不夠詳細還需要什么只管說!
問題解答
回答1:看這里,我猜你是用的是pymysql,它的線程安全描述為1,對應(yīng)的pep249里面做了詳細的描述:
Threads may share the module, but not connections.
線程可以共享模塊但不能共享連接。這也就是說你可能得在每個線程中創(chuàng)建一個連接。
吶~為什么不用orm來做呢?
相關(guān)文章:
1. 關(guān)docker hub上有些鏡像的tag被標記““This image has vulnerabilities””2. docker鏡像push報錯3. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題4. 前端 - @media query 使用出現(xiàn)的問題?5. 利用IPMI遠程安裝centos報錯!6. html5和Flash對抗是什么情況?7. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????8. phpstudy8.1沒集成mysql-front9. html - css氣泡,實現(xiàn)“倒三角(不知道算不算三角了)”可透明的。10. 運行python程序時出現(xiàn)“應(yīng)用程序發(fā)生異?!钡膬?nèi)存錯誤?

網(wǎng)公網(wǎng)安備