Maison  >  Questions et réponses  >  le corps du texte

python - erreur d'insertion mysql en multithreading

Lors de l'écriture d'un robot, je souhaite enregistrer les données explorées dans la base de données. Il y a de nombreuses entrées dans chaque page. Par exemple, une personne peut avoir de nombreux visiteurs, je l'insère donc dans la boucle de déchargement,

.
                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

Une page et un fil de discussion. Je n'ai pas aimé la lenteur et j'en ai ouvert 5

.
max_threads=5
        while 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+=1
                thread2=threading.Thread(target=run,args=(uid,))
                thread2.setDaemon(True)
                thread2.start()
                threadlist.append(thread2)
            time.sleep(5)

Fonctionnement fluide :

INSERT INTO visiteur (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) VALEUR("huosa i7",489 3 , 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 visiteur (nom du propriétaire, identifiant du propriétaire, nom du visiteur , visiteur, visite) VALEUR ("龙乐",4894,"Liang2017",7252799,"2017-5-22 21:06")
(1062, "Entrée en double '4894-7252799-2017-05-22 21 : 06 :00' pour la clé 'PRIMAIRE'")
INSÉRER DANS les informations personnelles (nom du propriétaire, identifiant du propriétaire, jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian, shangcihuodongshijian, zuihoufangwen, zhuceshijian, zaixianshijian, shengri, xingbie) VALEUR("龙乐",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)
.......

J'ai donc mis max_thread à 10, et le résultat est le suivant :

INSERT INTO visiteur (nom du propriétaire, identifiant du propriétaire, nom du visiteur, identifiant du visiteur, heure de la visite) VALEUR ("xiao61", 4889, "Liang2017", 7252799, "2017-5-22 21:06")

(2006, 'Le serveur MySQL a disparu')

INSÉRER DANS les informations personnelles (nom du propriétaire, identifiant du propriétaire, jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixianshi jian,shengri , xingbie ) VALEUR("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, 'Le serveur MySQL a disparu')

INSERT INTO visiteur (nom du propriétaire, identifiant du propriétaire, nom du visiteur, identifiant du visiteur, heure de la visite) VALUE ("ours cool confus", 4897, "Liang2017", 7252799, "2017-5-22 21:06")

(2006, 'Le serveur MySQL a disparu')

INSÉRER DANS les informations personnelles (nom du propriétaire, identifiant du propriétaire, jifen,huajiao,xiaomijiao,jinbi,haoyou,zhuti,rizhi,xiangce,fenxiang,kongjianfangwenliang,youxiangyanzheng,shipinrenzheng,juzhudi,chushengdi,shangcifabiaoshijian,shangcihuodongshijian,zuihoufangwen,zhuceshijian,zaixianshi jian,shengri , xingbie ) VALUE("ours cool confus",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, 'Le serveur MySQL a disparu')
.....

Vous pouvez voir que 2006 est sorti, puis j'ai défini max_thread sur 30, et les résultats sont les suivants :

C'est tout, est-ce assez détaillé ? Si ce n'est pas assez détaillé, de quoi d'autre avez-vous besoin ?

伊谢尔伦伊谢尔伦2685 Il y a quelques jours1075

répondre à tous(1)je répondrai

  • 巴扎黑

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

    Regardez ici, je suppose que vous utilisez pymysql, sa description de sécurité des threads est 1 et le pep249 correspondant a une description détaillée :

    Les threads peuvent partager le module, mais pas les connexions.

    Les threads peuvent partager des modules mais pas des connexions. Cela signifie que vous devrez peut-être créer une connexion dans chaque thread.

    Na~Pourquoi ne pas utiliser ORM pour le faire ?

    répondre
    0
  • Annulerrépondre