我需要在python中使用线程池,并且我希望能够知道何时至少有1个outad或“允许的最大线程数”已完成,因此如果我仍然需要执行某些操作,则可以再次启动它。一个线程池让我知道什么时候至少有1个完成?
我一直用这样的:
def doSomethingWith(dataforthread):
dostuff()
i = i-1 #thread has finished
i = 0
poolSize = 5
threads = []
data = #array of data
while len(data):
while True:
if i<poolSize: #if started threads is < poolSize start new thread
dataforthread = data.pop(0)
i = i+1
thread = doSomethingWith(dataforthread)
thread.start()
threads.append(thread)
else:
break
for t in threads: #wait for ALL threads (I ONLY WANT TO WAIT FOR 1 [any])
t.join()
据我所知,我的代码打开5个线程,然后等待所有线程启动新线程之前完成,直到数据被消耗。但我真正想要做的是只要其中一个线程完成并且该池有一个新线程的“可用点”,就会启动一个新线程。
我一直在阅读this,但我认为这将有相同的问题比我的代码(不知道,即时通讯新的python,但看看joinAll()它看起来像那样)。
有人有一个例子来做我想达到的目的吗?
我的意思是只要我比poolSize检测到<,就启动新的线程,直到i = poolSize并且这样做直到数据被消耗。
据我可以告诉他的代码做你想要的。他的joinAll()在加入线程之前一直等待任务队列为空... 值得注意的是最后一段: “Python中的线程池与其他语言相比有点用处不大,因为个人线程(大多数情况下)不能同时在多处理器机器上运行,因为Python有一个必须持有的单个全局解释器锁(GIL)来执行任何Python代码。(...)“ – getekha 2010-08-04 13:24:29
不joinAll等待所有线程?我想为1(或更多)(其中任何一个)提供帮助。我知道python一次只能运行一个线程,但我仍然想尝试一下。 – jahmax 2010-08-04 13:31:57