python - 如何从不同的进程访问全局变量
问题描述
我有两个运行在不同内核上的 python 进程,它们在运行时需要相互通信。目前我可以通过多线程实现这一点;
import threading
x=0
def a():
global x
if x==100:
pass
#Do something
def b():
global x
while 1:
x=x+1
t1=threading.thread(target=a)
t2=threading.thread(target=b)
t1.start()
t2.start()
但我想改用该multiprocessing
模块。有没有办法使用多处理将上述代码转换为某些东西?
解决方案
这是一个与您的原始示例类似但使用多处理的示例...
from multiprocessing import Process, Value
def a(x):
while True:
if x.value == 10:
print('Done. x = ', x.value)
break
def b(x):
for _ in range(10):
x.value += 1
x = Value('i', 0) # integer with initial value of 0
t1=Process(target=a, args=(x,))
t2=Process(target=b, args=(x,))
t1.start()
t2.start()
请注意,虽然我确实将x
其作为参数传递给了函数,但如果您只是将其用作全局参数,它看起来仍然有效,就像您在上面所做的那样。这里真正的技巧是使用multiprocessing.Value
对象并使用x.value
.
推荐阅读
- javascript - 将字符串转换为对象js函数
- gradle - 使用自定义 gradle 包装器的 Allure gradle 冲突
- html - Flexbox 使子宽度保持静态,每行设置数量
- c# - 我应该在 .net 核心 Web 应用程序中的哪里定义 API 端点?
- jquery - 使用 gtag.js 进行单页应用程序跟踪不起作用
- jquery - jQuery on-input 更改事件更新自我
- git - 用于下载和更新本地工作副本的 git 术语
- sql - 跨多个表选择条件布尔值
- pyinstaller - pyinstaller:创建一个可执行文件
- r - Keras 中一维卷积的展平层