kum*_*aji 1 python multiprocessing
pyhton ProcessPoolExecutor 在公共行中工作,但在添加到函数后不运行
它是这样工作的
from concurrent import futures
def multi_process(func, paras, threads):
with futures.ProcessPoolExecutor(max_workers=threads) as pool:
res = pool.map(func, paras, chunksize=threads)
return list(res)
p = multi_process(func,paras,threads)
Run Code Online (Sandbox Code Playgroud)
但根本不工作,如下所示
def upper(paras,threads):
def func:
some func
def multi_process(func, paras, threads):
with futures.ProcessPoolExecutor(max_workers=threads) as pool:
res = pool.map(func, paras, chunksize=threads)
return list(res)
p = multi_process(func,paras,threads)
return p
p = upper(paras,threads)
Run Code Online (Sandbox Code Playgroud)
没有警告或错误,但很长时间没有任何反应。
小智 5
你确实得到一个错误。它的。
AttributeError: Can't pickle local object 'upper.<locals>.func'.
Run Code Online (Sandbox Code Playgroud)
原因是多处理工作需要在全局级别定义函数。
要实现您想要的,您可以执行以下操作:
from concurrent import futures
# Has to be a global function
def func(para):
print(para)
def upper(paras,threads):
# This cannot be a local function.
#def func(para):
# print(para)
def multi_process(func, paras, threads):
with futures.ProcessPoolExecutor(max_workers=threads) as pool:
res = pool.map(func, paras, chunksize=threads)
return list(res)
p = multi_process(func, paras, threads)
return p
paras = [1, 2, 3]
threads = 3
p = upper(paras,threads)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |