찾다

 >  Q&A  >  본문

python - 멀티스레딩에서 mysql 삽입 오류가 발생했습니다.

크롤러를 작성할 때 크롤링된 데이터를 데이터베이스에 저장하고 싶습니다. 예를 들어 한 사람의 방문자가 많을 수 있으므로 언로드 루프에 삽입합니다. 으아악

한 페이지와 스레드 하나가 느린게 싫어서 5개를 열었습니다

으아악

원활한 실행:

INSERT INTO 방문자(소유자 이름,owneruid,방문자 이름,visitoruid,방문 시간) VALUE("huosai7",4893,"Liang2017",7252799,"2017-5-22 21:06")

INSERT INTO 개인 정보(소유자 이름,owneruid, jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixianshijian,shengri,xingbie) VALUE("hu 오사 i7",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 방문자 (소유자 이름, 소유자 UID, 방문자 이름 , 방문자UID,방문시간) VALUE ("龙乐",4894,"Liang2017",7252799,"2017-5-22 21:06")
(1062, "중복된 항목 '4894-7252799-2017-05-22 21: 06:00' 키 'PRIMARY'")
개인 정보에 삽입 (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 방문자 (ownername,owneruid,visitorname,visitoruid,visittime) VALUE ("xiao61",4889,"Liang2017",7252799,"2017-5-22 21:06")

(2006, 'MySQL 서버가 사라졌습니다')

개인 정보에 삽입(소유자 이름,owneruid,jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixian 시 지안, 성리, 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 서버가 사라졌습니다')

INSERT INTO Visitor (ownername,owneruid,visitorname,visitoruid,visittime) VALUE ("confused cool bear",4897,"Liang2017",7252799,"2017-5-22 21:06")

(2006, 'MySQL 서버가 사라졌습니다')

개인 정보에 삽입(소유자 이름,owneruid,jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixian 시 지안, 셍그리, 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 서버가 사라졌다')
......

2006년이 나온 것을 볼 수 있는데, max_thread를 30으로 설정했더니 결과는 다음과 같습니다.

그렇습니다. 충분히 상세하지 않다면 무엇이 더 필요합니까?

伊谢尔伦伊谢尔伦2722일 전1123

모든 응답(1)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-06-13 09:26:41

    여기를 보세요. pymysql을 사용하고 있는 것 같습니다. 스레드 안전 설명은 1이고 해당 pep249에는 자세한 설명이 있습니다.

    스레드는 모듈을 공유할 수 있지만 연결은 공유할 수 없습니다.

    스레드는 모듈을 공유할 수 있지만 연결은 공유할 수 없습니다. 즉, 각 스레드에서 연결을 만들어야 할 수도 있습니다.

    나~ ORM을 사용해서 해보는 건 어떨까요?

    회신하다
    0
  • 취소회신하다