2011-04-07 88 views
1

我可以幫助將此代碼從線程轉換爲Mutliprocess。 然後任何人都可以幫助轉換這個代碼usinf扭曲。線程與多進程vs Python中的扭曲

會不會有使用扭曲到Python的內上傳分貝
VS外部工具的增益。

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

您有沒有具體的問題,或者您真的只是想讓我們爲您編寫代碼? – nmichaels 2011-04-07 17:29:16

+0

我無法讀取可變縮進的python-pseudo代碼。你能介意糾正你的縮進。甚至發佈一個工作示例? – MattH 2011-04-07 17:30:05

+0

更新了代碼... – Merlin 2011-04-07 22:14:11

回答

1

更新:JP提到txpostgrestxmysql模塊,我不知道的。這些允許Twisted以異步方式訪問兩個數據庫(不使用線程池)。

請注意,如果您決定使用Twisted的企業adbapi,它將最終使用線程池來處理數據庫連接,大致等同於您現有的示例。請參閱docs on using Twisted's enterprise database module

您應該能夠直接將您的基於線程/隊列的代碼轉換爲使用多處理模塊,通過用Process實例取代線程,以及使用多處理Queue實現。請參閱multiprocessing docs

+0

您可以使用txpostgres或txmysql與沒有線程的postgres和mysql交談。 – 2011-04-07 18:49:58

+0

@JP我不知道這些項目,謝謝。我更新了答案。 – samplebias 2011-04-07 18:58:15