python中的多处理问题

时间:2014-03-12 23:20:29

标签: python multiprocessing

这是一个在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

1 个答案:

答案 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()