我有两个正在运行的处理程序,可以像这样访问导入的模块:

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/

10-12 20:24