将函数传递给多处理池中的地图或星图
Passing function to map or starmap in multiprocessing pool
我一直在尝试在我的机器上的 Jupyter 上测试这段简单的代码,但该单元会无限期地运行而不会输出任何内容。有什么错误吗?我对 pool.map
的 pandas 进程使用了完全相同的一段代码,一切正常,但无法弄清楚这里发生了什么。
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.map
还是 pool1.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 下查找“安全导入主模块”以获取更多信息。您不应在导入主模块期间创建池。
我一直在尝试在我的机器上的 Jupyter 上测试这段简单的代码,但该单元会无限期地运行而不会输出任何内容。有什么错误吗?我对 pool.map
的 pandas 进程使用了完全相同的一段代码,一切正常,但无法弄清楚这里发生了什么。
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.map
还是 pool1.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 下查找“安全导入主模块”以获取更多信息。您不应在导入主模块期间创建池。