如何退出名为我的multiprocessing.Pool
的函数
这是我正在使用的代码示例,当我设置退出函数 worker
的条件时,当我在终端中将其用作脚本时,它会停止并且不会退出。
def worker(n):
if n == 4:
exit("wrong number") # tried to use sys.exit(1) did not work
return n*2
def caller(mylist, n=1):
n_cores = n if n > 1 else multiprocessing.cpu_count()
print(n_cores)
pool = multiprocessing.Pool(processes=n_cores)
result = pool.map(worker, mylist)
pool.close()
pool.join()
return result
l = [2, 3, 60, 4]
myresult = caller(l, 4)
最佳答案
正如我所说,我认为您无法从工作进程中退出运行主脚本的进程。
您还没有准确解释为什么要这样做,所以这个答案是一个猜测,但也许会提出一个自定义 Exception
并以明确的方式处理它 except
如下所示是解决该限制的可接受方法。
import multiprocessing
import sys
class WorkerStopException(Exception):
pass
def worker(n):
if n == 4:
raise WorkerStopException()
return n*2
def caller(mylist, n=1):
n_cores = n if n > 1 else multiprocessing.cpu_count()
print(n_cores)
pool = multiprocessing.Pool(processes=n_cores)
try:
result = pool.map(worker, mylist)
except WorkerStopException:
sys.exit("wrong number")
pool.close()
pool.join()
return result
if __name__ == '__main__':
l = [2, 3, 60, 4]
myresult = caller(l, 4)
运行时显示的输出:
4
wrong number
(4
是我的系统拥有的 CPU 数量。)
关于python - 从 multiprocessing.Pool 调用的函数退出的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727856/