首页 > 解决方案 > 如何从不同的进程访问全局变量

问题描述

我有两个运行在不同内核上的 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模块。有没有办法使用多处理将上述代码转换为某些东西?

标签: pythonmultithreadingmultiprocessingpython-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.


推荐阅读