yakczh_cu 发表于 2018-01-02 10:09

multiprocessing.Pipe只有开始运行是对的,后面就乱了

#coding:utf-8

import 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

jeppeter 发表于 2018-01-03 12:52

回复 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

yakczh_cu 发表于 2018-01-03 13:39

回复 2# jeppeter

windows下试一下

jeppeter 发表于 2018-01-04 08:43

回复 3# yakczh_cu

我测试了一下,还是对的。我用的系统是anaconda的python3.5 系统,在window7 x64系统下面。

yakczh_cu 发表于 2018-01-04 14:14

回复 4# jeppeter
2.7呢, 这个是主流的版本

页: [1]
查看完整版本: multiprocessing.Pipe只有开始运行是对的,后面就乱了