下面的代码
import multiprocessing as mp
from multiprocessing.managers import SyncManager
n_cores = mp.cpu_count()
def parallel_fn(job_n, cache):
cache['job_b'] = job_n
return job_n
if __name__=="__main__":
with SyncManager() as manager:
shared_cache = manager.dict()
args = list(zip(range(n_cores), shared_cache))
with mp.Pool(n_cores) as pool:
result = pool.starmap(parallel_fn, args)
print(result)
print(shared_cache)
字符串
返回
16
Shared dict before: {}
Pool return: []
Shared dict after: {}
型
我期望从池中返回16个值,在共享字典中返回16个值,但两者都是空的,有人能帮我吗?
1条答案
按热度按时间fivyi3re1#
在这种情况下,多处理是一种转移注意力的方法。如果在定义
args
之后打印它,您将看到一个空列表。您将需要如下修复zip
行以创建元组列表。zip
返回两个(或更多)项中较短的一个。在这种情况下,你有一个长度为16的range
对象和一个长度为0的ProxyDict
对象(开始时是空的)。作为一个小例子,看看:list(zip([1, 2], dict()))
,它返回一个长度为0的列表。另外,我猜您希望将
job_n
作为名称放入该高速缓存字典中。字符串
在我的8核机器上,输出是:
型