我需要它来打开 10 个进程,每次其中一个完成时,我都想等待几秒钟,然后再启动另一个。这似乎很简单,但不知何故我无法让它工作。
问问题
1261 次
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 回答