我有两个处理运行,可以访问导入的模块:
import foo
def bar():
while True:
foo.a = True
def baz():
while True:
print foo.a
p1 = Process(target=bar)
p2 = Process(target=baz)
p1.start()
p2.start()
似乎每个进程都有自己的模块foo实例,bar()
将值更改为True,但在baz()
中它为False。任何解决方法?
答案 0 :(得分:3)
与线程不同,单独的进程不共享内存。
但是,有一些方法to share data between separate processes。
一种方法是使用mp.Value
:
<强> foo.py 强>:
import multiprocessing as mp
a = mp.Value('b', False)
然后是剧本
import time
import foo
import multiprocessing as mp
def bar():
foo.a.value = True
def baz():
for i in range(10**5):
print foo.a.value
if __name__ == '__main__':
p2 = mp.Process(target=baz)
p2.start()
time.sleep(0.5)
p1 = mp.Process(target=bar)
p1.start()
产量
0
0
0
...
1
1
1
...
为了共享布尔值,mp.Event
可能是更好的选择:
<强> foo.py 强>:
import multiprocessing as mp
a = mp.Event()
<强> script.py 强>:
def bar():
foo.a.set()
def baz():
for i in range(10**5):
print foo.a.is_set()
产量
False
False
False
...
True
True
True
...