Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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 Multiprocessing_Pool - Fatal编程技术网

可以终止作为池中工作进程的python进程吗?

可以终止作为池中工作进程的python进程吗?,python,python-multiprocessing,pool,Python,Python Multiprocessing,Pool,每个工作进程运行一个长的CPU限制计算。计算取决于参数,这些参数可以随时更改,即使在计算过程中也是如此。如果发生这种情况,计算的最终结果将变得毫无用处。我们不控制计算代码,所以我们不能发出停止的信号。我们能做什么 无:让工作人员完成其任务,然后以某种方式意识到结果不正确,必须重新计算。这意味着继续使用处理器可能会产生无用的结果,可能会持续很长时间 不要使用池:根据需要创建并加入流程。然后,我们可以终止这个无用的进程并创建另一个进程。我们甚至可以对同时存在的进程的数量进行限制。不幸的是,我们不会重

每个工作进程运行一个长的CPU限制计算。计算取决于参数,这些参数可以随时更改,即使在计算过程中也是如此。如果发生这种情况,计算的最终结果将变得毫无用处。我们不控制计算代码,所以我们不能发出停止的信号。我们能做什么

  • 无:让工作人员完成其任务,然后以某种方式意识到结果不正确,必须重新计算。这意味着继续使用处理器可能会产生无用的结果,可能会持续很长时间
  • 不要使用池:根据需要创建并加入流程。然后,我们可以终止这个无用的进程并创建另一个进程。我们甚至可以对同时存在的进程的数量进行限制。不幸的是,我们不会重用流程
  • 找到终止和替换池工作线程的方法:是否可以终止池工作线程?创建池将替换终止的池吗?如果没有,是否有在池中创建新工作线程的外部方法
  • 考虑到严格的“无法更改计算代码”限制(防止间歇性检查无效),您最好的选择可能是#2

    在本例中,您提到的#2的缺点(“不幸的是,我们不会重用流程”)并不是什么大问题。当流程所做的工作相对于启动流程的开销较小时,重用流程是一个问题。但这听起来像是你在谈论的过程中运行的秒或更长;
    fork
    生成一个新进程(大多数UNIX类的默认值)的成本只是这个成本的一小部分,而
    spawn
    生成一个进程(MacOS和Windows上的默认行为)的成本通常仍然是以一秒钟的一小部分来衡量的

    作为比较:

    选项1是浪费;如果您的内核快要用完了,并且失效发生的频率不限,那么您就不想让内核无限期地在垃圾堆上嘎嘎作响


    选项#3即使有效,也只是巧合,可能会在Python的新版本中出现,因为杀死工人的行为并不是一个有文档记录的特性。

    是的,我明白你的意思。此外,长时间运行的流程最有可能因更改而失效