Многопоточность против многопроцессорности против Twisted в Python

#python #mysql #multithreading #twisted #multiprocessing

#python #mysql #многопоточность #twisted #многопроцессорность

Вопрос:

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

Будет ли выгода от использования twisted для загрузки БД
в 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. У вас был конкретный вопрос, или вы действительно просто хотели, чтобы мы написали код для вас?

2. У меня возникли проблемы с чтением вашего псевдокода python с переменным отступом. Не могли бы вы исправить свой отступ. Или даже опубликовать рабочий пример?

3. 1 nmichaels Это не похоже на вопрос.

Ответ №1:

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

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

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

Комментарии:

1. Вы можете использовать txpostgres или txmysql для взаимодействия с postgres и mysql без потоков.

2. @JP Я не знал об этих проектах, спасибо. Я обновил ответ.