有识

个人网 | 追寻一切真知灼见

用户工具

站点工具


侧边栏

博主公告

想读书,想旅游,想运动,但是没有时间?其实我们不是没有时间,只是没有真正把想做的事情,放在重要的位置上,或者干脆没时间搞清楚到底那件事情对你来说更重要。^_^ 欢迎大家收看《程序员带你学打羽毛球》 和博主一起加入运动的行列。 ease 11:53 - 08月02日




最新博文》更多博文

分类索引

博主简介
吕某某 Leo
河北人,网名:ease
资深IT菜鸟,创业者
兴趣爱好:
人工智能,运动,读书,coding
人生格言:
命由己造 相由心生 有容乃大 无欲则刚 》博主管理》关于博主


blog:ease:python:python进程通信_利用pipe管道进行全双工通信的案例

python进程通信:利用Pipe管道进行全双工通信的案例

在网上看到的资料中以单向通信的案例为主,一端作为接收端,一端作为发送端。 为了测试pipe的全双工通信,写了下面的案例。从面的案例可以看到管道的两端都是可读可写的。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
import multiprocessing, time
 
def consumer(pipe):
    conn1,conn2 = pipe
    conn2.close()
    while True:                  # 首先做消费者
        try:
            item = conn1.recv()
            if item == None:
                break
            print("cons消费:",item)
        except EOFError:
            break
 
    for item in range(10,20):    # 然后转为生产者
        print('cons生产:',item)
        conn1.send(item)
 
    conn1.close()                # 生产完毕关闭
 
 
 
def producer(pipe):
    conn1,conn2 = pipe
    conn1.close()
    for item in range(10):       # 首先做为生产者
        print('prod生产:',item)
        conn2.send(item)
 
    conn2.send(None)             # 发送一个信号
 
    while True:                  # 变为消费者
        try:
            item = conn2.recv()
            print("prod消费:",item)
        except EOFError:
            break
 
if __name__ == '__main__':
    conn1,conn2 = multiprocessing.Pipe()
 
    cons_p = multiprocessing.Process(target=consumer,args=((conn1,conn2),))
    cons_p.start()
 
    producer((conn1,conn2))
    cons_p.join()
blog/ease/python/python进程通信_利用pipe管道进行全双工通信的案例.txt · 最后更改: 03:42 - 09月02日 (外部编辑)