aka*_*kin 6 python python-multiprocessing
我正在运行两个处理来访问导入的模块,如下所示:
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()
Run Code Online (Sandbox Code Playgroud)
似乎每个进程都有自己的模块 foo 实例,bar()将值更改为 True,但实际上baz()是 False。有什么解决办法吗?
与线程不同,单独的进程不共享内存。然而,有一些方法可以在不同的进程之间共享数据。一种方法是使用mp.Value:
foo.py:
import multiprocessing as mp
a = mp.Value('b', False)
Run Code Online (Sandbox Code Playgroud)
然后是脚本
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()
Run Code Online (Sandbox Code Playgroud)
产量
0
0
0
...
1
1
1
...
Run Code Online (Sandbox Code Playgroud)
对于共享布尔值, anmp.Event可能是更好的选择:
foo.py:
import multiprocessing as mp
a = mp.Event()
Run Code Online (Sandbox Code Playgroud)
脚本.py:
def bar():
foo.a.set()
def baz():
for i in range(10**5):
print foo.a.is_set()
Run Code Online (Sandbox Code Playgroud)
产量
False
False
False
...
True
True
True
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5786 次 |
| 最近记录: |