Как реализовать скрипт master / watchdog в python? - PullRequest
2 голосов
/ 17 марта 2010

Мне нужно, чтобы открыть 10 процессов, и каждый раз, когда один из них завершается, я хочу подождать несколько секунд и запустить другой. Это кажется довольно простым, но почему-то я не могу заставить его работать.

Ответы [ 2 ]

2 голосов
/ 17 марта 2010

Я не на 100% уверен в том, что вы пытаетесь достичь, но вы смотрели на модуль multiprocessing, в частности , используя группу работников ?

1 голос
/ 17 марта 2010

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

Это фактически запускает потоки, которые немного запускают внешние процессы по пути выполнения.

Вот пример.


    thread_sem = threading.Semaphore(int(cfg.maxthreads))
    for k,v in log_data.items():
        thread_list.append(ProcessorThread(int(k), v, thread_sem))
        thread_list[-1].start()

И затем в конструкторе для ProcessorThread я делаю это:


    def __init__(self, siteid, data, lock_object):
        threading.Thread.__init__(self)
        self.setDaemon(False)
        self.lock_object = lock_object
        self.data = data
        self.siteid = siteid
        self.lock_object.acquire()

Когда поток завершает свою задачу (успешно или нет), lock_object освобождается, что позволяет начать другой процесс.

НТН

...