Предложения Python по многопоточности - PullRequest
0 голосов
/ 29 марта 2012

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

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

Если все потоки, кроме начального "основного" потока, должны выполняться последовательно, то да, вам следует использовать очередь задач и один рабочий поток.

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

0 голосов
/ 29 марта 2012

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

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])
...