我在使用Python的多处理模块时遇到了一些麻烦。我需要测试具有不同参数的函数,并且由于该函数进行了大量计算,因此最需要使用所有核心。我最终使用了适合我需要的pool.map()。问题是有时候我的函数永远不会结束,所以pool.map会永远阻塞,期望返回值。我不知道为什么会这样。我在没有使用多处理的情况下做了很多测试,只是在for循环中传递了一个又一个的argumment,它总是结束。
无论如何,我现在要做的是为每个worker /执行函数指定一个超时,但是如果达到超时,我需要在函数内部返回一个变量。这就像超时发生前函数的状态。我的代码太大了,不能在这里发布,但这是一个简单的,相当的例子:
def func(x):
secsPassed = 0
for _ in xrange(x):
time.sleep(1)
secsPassed +=1
return secsPassed
pool = Pool(4)
results = pool.map(func, [3, 10, 50, 20, 300])
所以我希望每次执行都需要最多30秒,而且我也想知道在func被干扰之前secsPassed的值。我使用的是Python 2.7,我可以对func进行更改,或者在必要时使用除Pool.map之外的其他工具。
提前致谢。
答案 0 :(得分:0)
This question has been asked several times in the past.
multiprocessing.Pool
并非针对此类用例而设计。
强迫其中一名工人自杀将导致未定义的行为,这可能会因为永远停留在那里而导致程序崩溃。
有些库可以解决您的问题。 pebble允许您为工作人员设置超时,并在超过时间限制时停止工作。