python - 从 multiprocessing.Pool 调用的函数退出的正确方法?

标签 python multiprocessing pool

如何退出名为我的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/

相关文章:

python - django selenium 无法加载本地主机

python - 使用大型数据集时发生内存错误

python - 当日期和时间在不同的列中时,将数据从 csv 读取到 pandas

c# - 资源池的正确实现方式

java - 我怎样才能得到一个 RejectedExecutionException

Java apache.commons.pool : How to set a maximum idle time for the objects from the pool?

python - 简单抓取 youtube xml 以获得 Python 视频列表

关于工作刷新的 python 多处理池通知

python - Python的Multiprocessing之进程通信

python - 运行多个python脚本和多处理有什么区别