Python多处理和导入的模块

时间:2015-08-19 13:01:24

标签: 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()

似乎每个进程都有自己的模块foo实例,bar()将值更改为True,但在baz()中它为False。任何解决方法?

1 个答案:

答案 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
...