这是一个在python中测试多处理的简单代码。 f()每秒打印几个整数,如果f()的输出超过阈值,monitor()会输出警告。
#!/usr/bin/python
from multiprocessing import Process
import time
def f():
global y
n = 20
for i in range (n):
y = i
print y
time.sleep(1)
def monitor():
n = 20
for i in range(20):
if y >= 10:
print 'y is greater than 10.'
time.sleep(1)
if __name__ == '__main__':
p1 = Process(target = f, args = ())
p2 = Process(target = monitor, args = ())
p1.start()
p2.start()
p1.join()
p2.join()
问题是当我执行此代码时没有任何反应。我甚至都没有收到错误。我怎样才能解决这个问题? 如果我使用线程而不是多处理,相同的过程可以完美地工作,但我也希望能够使用多处理来完成相同的工作。
python v 2.7.6
操作系统:Windows 7
答案 0 :(得分:1)
我运行代码时遇到错误。这些来自于global y
不在进程之间共享的事实。使用多处理程序包时,必须显式地为进程间通信预留共享内存。您可以使用同步的Value
实例执行此操作。
所以你的代码应该是:
#!/usr/bin/python
from multiprocessing import Process,Value
import time
import ctypes
def f(y):
n = 20
for i in range (n):
y.value = i
print y.value
time.sleep(1)
def monitor(y):
n = 20
for i in range(20):
if y.value >= 10:
print 'y is greater than 10.'
time.sleep(1)
if __name__ == '__main__':
y = Value(ctypes.c_int)
p1 = Process(target = f, args = (y,))
p2 = Process(target = monitor, args = (y,))
p1.start()
p2.start()
p1.join()
p2.join()