Python Threading / Fork? - PullRequest
       12

Python Threading / Fork?

4 голосов
/ 23 января 2010

Я делаю скрипт на python, который должен делать 3 вещи одновременно. Что является хорошим способом для достижения этой цели, поскольку я слышал о GIL, я больше не склонен использовать потоки.
Две вещи, которые необходимо выполнить сценарию, будут очень активными, у них будет много работы, а затем мне нужно, чтобы третья вещь сообщала пользователю через сокет, когда он спрашивает (так что это будет как крошечный сервер) о состоянии двух других процессов.
Теперь мой вопрос: что может быть хорошим способом для достижения этой цели? Я не хочу иметь три разных скрипта, а также из-за того, что GIL использует потоки, я думаю, что у меня не будет много производительности, и я ухудшу ситуацию.
Есть ли fork () для python, как в C, так что из моего сценария, чтобы процессы fork 2 выполняли свою работу, а из основного процесса - сообщали пользователю? И как я могу общаться от разветвленных процессов с основным процессом?

LE: : чтобы быть более точным, 1thread должен получать электронную почту с сервера imap и сохранять их в базе данных, другой поток должен получать сообщения из db, которые необходимо отправить, а затем отправлять их и основной поток должен быть крошечным http-сервером, который будет принимать только один URL и отображать состояние этих двух потоков в формате json. Так что, темы хорошо? Будет ли работа выполняться одновременно или из-за проблем с производительностью?

Ответы [ 2 ]

4 голосов
/ 23 января 2010

Я думаю, вы могли бы использовать пакет multiprocessing , API-интерфейс которого аналогичен пакету потоков, и который позволит вам повысить производительность с несколькими ядрами на одном процессоре.

Чтобы увидеть выигрыш в производительности при использовании многопроцессорной обработки вместо многопоточности, установите флажок по этой ссылке о среднем сравнении времени той же программы, использующей многопроцессорную обработку потоков x.

2 голосов
/ 23 января 2010

GIL действительно важен только для многопроцессорной обработки, которая распределяет нагрузку на несколько ядер / процессоров. Если это так, и это похоже на ваше описание, используйте многопроцессорность.

Если вам просто нужно сделать три вещи «одновременно» таким образом, что вам нужно подождать в фоновом режиме, чтобы что-то произошло, тогда потоки - это нормально. Для этого и нужны темы. 8-я)

...