python - 将函数传递给多处理池中的 map 或星图

标签 python python-3.x multithreading python-multiprocessing

我一直在尝试在我的 Jupyter 机器上测试这段简单的代码,并且单元只是无限期地运行而不输出任何内容。是否有某种错误或其他什么?我对 pandas 进程使用了​​完全相同的代码 pool.map ,一切都工作正常,但无法弄清楚这里发生了什么。

import multiprocessing as mp 
pool1 = mp.Pool(processes = 3)

def sumP(a, b):
    return (a * b) / (a - b + 1)

f1, f2, f3 = 24, 31, 45
new_rows2 = pool1.starmap(sumP, [(f1, f2), (f2, f3), (f1, f3)]) 
print(new_rows2)

并且单元继续运行。我使用 pool1.mappool1.starmap 都没关系。 你们有建议任何其他方法来并行化这个过程吗?

最佳答案

发生这种情况是因为工作进程尝试导入 sumP,这还会创建另外 3 个进程,无限循环。

您需要在多进程创建周围设置保护,以便工作线程不会无限期地产生:

import multiprocessing as mp 

def sumP(a, b):
    return (a * b) / (a - b + 1)

f1, f2, f3 = 24, 31, 45

if __name__ == "__main__":
    pool1 = mp.Pool(processes=3)
    new_rows2 = pool1.starmap(sumP, [(f1, f2), (f2, f3), (f1, f3)]) 
    print(new_rows2)

multiprocessing docs 下查找“安全导入主模块”了解更多信息。您不应在导入主模块期间创建池。

关于python - 将函数传递给多处理池中的 map 或星图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69535321/

相关文章:

python - 在 django 映射中如何获取选择字段的完整计数

python - 如何在文件中写入换行符?

linux - 向设备发送串行消息,直到它在线

python - 使用 Hadoop 流式处理线程

检查列表中不定# of consec 元素是否总和为给定值的 Pythonic 方法

python - 根据条件将多个列值设置为 NaN

python - 如何以适用于 py2 和 py3 的方式在 Python 中定义二进制字符串?

c++ - 在多线程 C++ 应用程序中,我是否需要互斥锁来保护简单的 boolean 值?

java - 如何让一个方法等待另一个类的输入?

python - 什么是 python 中的 super (类型)?