2

我需要它来打开 10 个进程,每次其中一个完成时,我都想等待几秒钟,然后再启动另一个。这似乎很简单,但不知何故我无法让它工作。

4

2 回答 2

2

我不是 100% 清楚你想要完成什么,但你看过这个multiprocessing模块,特别是使用一个工人池吗?

于 2010-03-17T18:29:06.413 回答
1

我已经用信号量做了同样的事情来处理网络统计数据。本质上,随着进程的创建,信号量会增加。当他们退出时,它会减少。当信号量阻塞时,创建过程被阻塞。

这实际上触发了线程,这些线程在执行路径上运行了一些外部进程。

这是一个例子。


    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被释放,允许另一个进程开始。

高温高压

于 2010-03-17T18:16:51.393 回答