2012-03-29 2 views
0

У меня есть вопрос относительно моей текущей конструкции потоковой обработки - мой текущий процесс порождает новый поток и продолжает основной поток до условия завершения. Процесс ждет, пока все потоки не закончатся до завершения. Проблема, с которой я сталкиваюсь, заключается в том, что каждый новый поток, созданный, должен видеть, завершен ли предыдущий поток. Должен ли я просто настроить очередь и использовать только один поток для обработки всех задач? Или возможно порождать поток, как-то проверить, выполняется ли предыдущий поток и обрабатывать задачу только после того, как этот поток будет поставлен под вопрос?Предложения по дизайну многопоточности Python

спасибо за вашу помощь

+1

В стороне: вы должны знать/читать о Global Interpreter Lock (GIL), который может значительно повлиять на эффективность многопоточных приложений CPython –

ответ

4

Если все нитей в стороне от первоначальных «основных» нитей должны выполняться последовательно, то да, вы должны использовать очереди задач и один рабочий поток.

Queue может помочь с этим (и разрешить ваш основной поток .join() на нем, если ему нужно дождаться завершения всех поставленных задач).

0

Посмотрите на Gevent.
Вы можете создать несколько объектов Greenlet для выполнения нескольких задач.
Каждая родословная green thread.

 
from gevent import monkey 
monkey.patch_all() 
import gevent 
from gevent import Greenlet 

class Task(Greenlet): 
    def __init__(self, name): 
     Greenlet.__init__(self) 
     self.name = name  
    def _run(self): 
     print "Task %s: some task..." % self.name 

t1 = Task("task1") 
t2 = Task("task2") 
t1.start() 
t2.start() 
# here we are waiting all tasks 
gevent.joinall([t1,t2]) 
Смежные вопросы