使用Python多处理处理处理每个工作线程超时
我在使用Python的多处理模块时遇到了一些问题。我需要用不同的参数测试一个函数,因为这个函数需要进行大量的计算,所以使用所有的核是最理想的。我最终使用了pool.map(),这符合我的需要。问题是,有时我的函数永远不会结束,因此pool.map会一直被阻塞,希望返回一个值。我不知道为什么会这样。我做了很多测试,没有使用多处理,只是在for循环中一个接一个地传递参数,它总是结束 无论如何,我现在要做的是为每个worker/函数的执行指定一个超时,但是我需要在函数中返回一个变量,以防达到超时。这与超时发生前函数的状态类似。我的代码太大,无法在此处发布,但这里有一个简单的等效示例:使用Python多处理处理处理每个工作线程超时,python,python-2.7,parallel-processing,multiprocessing,Python,Python 2.7,Parallel Processing,Multiprocessing,我在使用Python的多处理模块时遇到了一些问题。我需要用不同的参数测试一个函数,因为这个函数需要进行大量的计算,所以使用所有的核是最理想的。我最终使用了pool.map(),这符合我的需要。问题是,有时我的函数永远不会结束,因此pool.map会一直被阻塞,希望返回一个值。我不知道为什么会这样。我做了很多测试,没有使用多处理,只是在for循环中一个接一个地传递参数,它总是结束 无论如何,我现在要做的是为每个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的值。我使用的是Python2.7,我可以对func进行更改,或者在必要时使用Pool.map之外的其他工具
提前谢谢。
multiprocessing.Pool
尚未针对此类用例进行设计
强迫其中一名工作人员自杀将导致未定义的行为,从永远停留在那里到让程序崩溃
有一些库可以解决您的问题。允许您为工作人员设置超时,并在超过时间限制时停止工作人员。是否可以改为芹菜?它允许超时,并且很容易重试。另外,如果您在一台服务器上安装RabbitMQ,您可以通过部署连接到同一RabbitMQ的代码来使用多台服务器或PC。我将对此进行检查,但我更倾向于避免在该项目中使用第三方库。