python - 如何在 Python 中的多处理期间访问全局变量
问题描述
我在 Python 中使用多处理编写了以下玩具代码。
我希望该函数func
并行运行并写入全局变量:var
,varr
和varrr
. 然而,下面的代码只为var
和打印varr
零varrr
。
如何func
修改全局变量var
,varr
以及varrr
???
import multiprocessing as mp
import itertools
import numpy as np
p = 3
ind = range(p)
ind_list = list(itertools.product(ind,ind,ind))
var = np.zeros([p,p,p])
varr = np.zeros([p,p,p])
varrr = np.zeros([p,p,p])
def func(ind_list):
global var, varr, varrr
i = ind_list[0]
j = ind_list[1]
k = ind_list[2]
var[i][j] = i + j + k
varr[i][j] = i*j*k
varrr[i][j] = 2*i*j*k
for a in range(p):
pool = mp.Pool()
pool.map(func,ind_list)
pool.close()
pool.join()
print('\n\n',var,'\n\n',varr,'\n\n',varrr,'\n\n')
解决方案
正如一些评论已经提到的,多处理不共享内存(即您不能从进程内访问全局变量)。您可以使用管道在进程之间共享信息。
另一种选择是使用线程(共享内存)。但是,由于全局解释器锁,这在技术上不会完全并行运行。
推荐阅读
- azure - “az network vnet peering create”导致“BadRequestError:无法解析请求”。
- javascript - React redux 搜索无法正常工作
- sql - 有没有办法“打破”程序?
- html - 如果在提交 jQuery 时选中单选
- javascript - 如何制作反应菜单 Discord.js
- java - 如何使用 Keycloak REST API 使用 SMS OTP 无密码身份验证登录?
- excel - 在使用转换为链接数据类型(股票)命令的行之后,我的 VBA 子例程停止运行
- python - 创建随机 DNA 序列并将其保存为 csv 文件
- html - Select2 引导元素未按预期调整大小
- google-people-api - Google People API createContact(429 资源已用尽(例如检查配额))