Потоки против многопроцессорности против витой в Python - PullRequest
1 голос
/ 07 апреля 2011

Могу ли я получить помощь в преобразовании этого кода из Threading в Mutliprocess.Тогда кто-нибудь может помочь конвертировать этот код, используя usinf twisted.

Будет ли выигрыш от использования twisted для загрузки db
в Python против внешних инструментов.

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'  

1 Ответ

1 голос
/ 07 апреля 2011

Обновлено : JP упомянул модули txpostgres и txmysql , о которых я не знал , Это позволяет Twisted обращаться к обеим базам данных асинхронно (без использования пула потоков).

Обратите внимание, что если вы решите использовать корпоративную adbapi в Twisted, она в конечном итоге будет использовать пул потоков для обработки соединений с базой данных, что примерно эквивалентно вашему существующему примеру. См. документы по использованию модуля корпоративной базы данных Twisted .

Вы должны иметь возможность напрямую переводить код на основе потоков / очередей для использования модуля многопроцессорной обработки, заменяя свои потоки экземплярами Process и используя реализацию многопроцессорной обработки Queue. См. многопроцессорные документы .

...