multiprocessing.Pipe只有开始运行是对的,后面就乱了
#coding:utf-8import multiprocessing
import time
from multiprocessing import Process,freeze_support
def proc1(pipe):
i=0
while True:
i=i+1
print "\nPROC1-SEND %s"%i
pipe.send(i)
time.sleep(3)
print '\nPROC1-RECV:',pipe.recv()
def proc2(pipe):
while True:
print '\n\t\t\tproc2 recv:',pipe.recv()
time.sleep(3)
print "\n\t\t\tproc2 send %c"% 65
pipe.send('A')
# Build a pipe
pipe = multiprocessing.Pipe(duplex=True)
#print pipe
# Pass an end of the pipe to process 1
p1 = multiprocessing.Process(target=proc1, args=(pipe,))
# Pass the other end of the pipe to process 2
p2 = multiprocessing.Process(target=proc2, args=(pipe,))
if __name__ == '__main__':
freeze_support()
p1.start()
p2.start()
p1.join()
p2.join()输出结果
PROC1-SEND 1
proc2 recv: 1
PROC1-RECV:
proc2 send A
proc2 recv:A
PROC1-SEND 2
2
PROC1-RECV:
proc2 send A
回复 1# yakczh_cu
我测试你的代码,在python2上是完全正确,
在python3上,只要修改了print的代码,也是完全正确。所以不知道你是如何不正确的。
PROC1-SEND 1
proc2 recv: 1
proc2 send A
PROC1-RECV: A
PROC1-SEND 2
proc2 recv: 2
proc2 send A
PROC1-RECV: A
PROC1-SEND 3
proc2 recv: 3
proc2 send A
PROC1-RECV: A
PROC1-SEND 4
proc2 recv: 4
proc2 send A
PROC1-RECV: A
PROC1-SEND 5
proc2 recv: 5
proc2 send A
PROC1-RECV: A
PROC1-SEND 6
proc2 recv: 6
proc2 send A
PROC1-RECV: A
PROC1-SEND 7
proc2 recv: 7
proc2 send A
PROC1-RECV: A
PROC1-SEND 8
proc2 recv: 8
回复 2# jeppeter
windows下试一下
回复 3# yakczh_cu
我测试了一下,还是对的。我用的系统是anaconda的python3.5 系统,在window7 x64系统下面。
回复 4# jeppeter
2.7呢, 这个是主流的版本
页:
[1]