python中的多处理问题

2024-04-23 07:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这是在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 2.7.6版

操作系统:windows 7


Tags: 代码inimporttargetforiftimedef
1条回答
网友
1楼 · 发布于 2024-04-23 07:03:22

所以我运行你的代码时会出错。这是因为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()

相关问题 更多 >