2011-04-07 3 views
1

Puis-je obtenir de l'aide pour convertir ce code de Threading en Mutliprocess. Alors peut-on aider à convertir ce code usinf tordu.Threading vs Multiprocessus vs Twisted en Python

Y-a-t-il un avantage à utiliser l'option tordu pour télécharger db
dans Python vs Outils externes.

import os, pyodbc, sys, threading, Queue 


class WorkerThread(threading.Thread): 
    def __init__(self, queue): 
     threading.Thread.__init__(self) 
     self.queue = queue 

    def run(self): 
     while 1: 
      try: # take a job from the queue 
       type = self.queue.get_nowait() 

      except Queue.Empty: 
       raise SystemExit 

      try: 
       cxn = pyodbc.connect('DSN=MySQL;PWD=MLML;Option=3') 
       csr = cxn.cursor()  
       # Inserts,update, CRUD 

      except: 
       # count = count +1 
       print 'DB Error', type 

if __name__ == '__main__': 
    connections = 25 

    sml = ('A', 'B', 'C','D',) 
    # build a queue with tuples 
    queue = Queue.Queue() 

    for row in sml: 
     if not row or row[0] == "#": 
      continue 
     queue.put(row) 

    threads = [] 
    for dummy in range(connections): 
     t = WorkerThread(queue) 
     t.start() 
     threads.append(t) 

    # wait for all threads to finish 
    for thread in threads: 
     thread.join() 

    sys.stdout.flush() 

#csr.close() 
#cxn.close() 
print 'Finish' 
+8

Avez-vous eu une question précise, ou vouliez-vous simplement nous écrire du code pour vous? – nmichaels

+0

Je n'arrive pas à lire votre code pseudo-pseudo en retrait. Pourriez-vous corriger votre indentation? Ou même poster un exemple de travail? – MattH

+0

a mis à jour le code ... – Merlin

Répondre

1

Mise à jour: JP mentionné les modules txpostgres et txmysql, que je ne connaissais pas. Ils permettent à Twisted d'accéder aux deux bases de données de manière asynchrone (sans utiliser de pool de threads). Notez que si vous décidez d'utiliser l'adbapi d'entreprise de Twisted, il finira par utiliser un pool de threads pour gérer les connexions à la base de données, soit l'équivalent de votre exemple existant. Voir le docs on using Twisted's enterprise database module. Vous devriez être en mesure de traduire directement votre code basé sur la file/file d'attente pour utiliser le module multitraitement, en remplaçant vos threads par Process instances, et en utilisant l'implémentation multiprocessing Queue. Voir le multiprocessing docs.

+0

Vous pouvez utiliser txpostgres ou txmysql pour parler à postgres et mysql sans threads. –

+0

@JP Je n'étais pas au courant de ces projets, merci. J'ai mis à jour la réponse. – samplebias