Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python多处理处理处理每个工作线程超时_Python_Python 2.7_Parallel Processing_Multiprocessing - Fatal编程技术网

使用Python多处理处理处理每个工作线程超时

使用Python多处理处理处理每个工作线程超时,python,python-2.7,parallel-processing,multiprocessing,Python,Python 2.7,Parallel Processing,Multiprocessing,我在使用Python的多处理模块时遇到了一些问题。我需要用不同的参数测试一个函数,因为这个函数需要进行大量的计算,所以使用所有的核是最理想的。我最终使用了pool.map(),这符合我的需要。问题是,有时我的函数永远不会结束,因此pool.map会一直被阻塞,希望返回一个值。我不知道为什么会这样。我做了很多测试,没有使用多处理,只是在for循环中一个接一个地传递参数,它总是结束 无论如何,我现在要做的是为每个worker/函数的执行指定一个超时,但是我需要在函数中返回一个变量,以防达到超时。这与

我在使用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。我将对此进行检查,但我更倾向于避免在该项目中使用第三方库。