我想在我的进程之间共享一个字典,如下所示:def f(y,x):y[x]=[x*x] if __name__ == __main__:pool = Pool(processes=4)inputs = range(10)y={} ...

我想在我的进程之间共享一个字典,如下所示:
def f(y,x):
y[x]=[x*x]
if __name__ == '__main__':
pool = Pool(processes=4)
inputs = range(10)
y={}
result = pool.map(f,y,inputs)
y返回{}.我怎样才能使它工作?
谢谢,
解决方法:
这看起来像您正在使用多处理模块.你没有说,这是一个重要的信息.
multiprocessing.Pool()实例上的.map()函数有两个参数:一个函数和一个序列.将使用序列中的连续值调用该函数.你试图传递y和序列,这将无法正常工作.
你可以创建一个这样的序列:(输入中的x为(y,x)),并编写一个带有一个参数,一个元组的函数,然后用它做正确的事.
我只使用multiprocessing.Pool()来运行读取和写入磁盘文件的进程,所以我不确定这个基本思想是如何工作的:我不确定你是否能像你想要的那样改变一个dict .
我建议只从函数中传回值,然后收集它们以得出最终结果.我刚刚测试了这段代码,它可以工作:
import multiprocessing as mp
def f(x):
return (x, x*x)
if __name__ == '__main__':
pool = mp.Pool()
inputs = range(10)
result = dict(pool.map(f, inputs))
结果设置为:{0:0,1:1,2:4,3:9,4:16,5:25,6:36,7:49,8:64,9:81}
让我们改变它,以便不是计算x * x而是将x提升到一些功率,并且将提供功率.让我们来看一个字符串键参数.这意味着f()需要采用元组参数,其中元组将是(key,x,p)并且它将计算x ** p.
import multiprocessing as mp
def f(tup):
key, x, p = tup # unpack tuple into variables
return (key, x**p)
if __name__ == '__main__':
pool = mp.Pool()
inputs = range(10)
inputs = [("1**1", 1, 1), ("2**2", 2, 2), ("2**3", 2, 3), ("3**3", 3, 3)]
result = dict(pool.map(f, inputs))
如果您有多个序列并且需要将它们连接在一起以构成上述序列,请查看使用zip()或者itertools.product.
本文标题为:Python在并行进程之间共享字典


基础教程推荐
- windows 安装python 2023-09-04
- python Windows和Linux路径表示问题 2023-09-04
- 如何在Python中通过管道传输到os.execv进程的stdin 2023-11-12
- Windows(64位)上的Python 2.7.8(64位)是Ubuntu(64位)上2.7.8(64位)的一半 2023-11-12
- PYTHON-进程 子进程 2023-09-03
- Python变量内存管理 2023-11-11
- python-yml文件读写与xml文件读写 2022-08-30
- python-(Buildbot)无法使用ShellCommand激活virtualenv 2023-11-13
- pandas dataframe drop函数介绍 2022-10-20
- 与Python中的Unix过滤器进程进行通信 2023-11-12