如何从不同的进程访问全局变量
How to access global variables from separate processes
我有两个 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
.
访问它
我有两个 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
.