我有两个正在运行的处理程序,可以像这样访问导入的模块:
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。任何解决方法? 最佳答案
与线程不同,单独的进程不共享内存。
但是,有几种方法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
...
关于python - Python多重处理和导入的模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32096279/