博客
关于我
python 多进程-进阶-进程间通信之Pipe
阅读量:803 次
发布时间:2023-03-07

本文共 1670 字,大约阅读时间需要 5 分钟。

Pipe在计算机编程中是一种常用的跨进程通信机制,用于在两个进程之间传递数据。通常情况下,Pipe分为两个端口,分别位于发送方和接收方的进程中。Pipe的双工模式(默认配置)意味着两个端口都可以同时发送和接收数据,而单工模式则限定其中一个端口仅用于发送,另一个端口仅用于接收。

在双工模式下,发送方(conn1)可以调用send方法发送数据,同时接收方(conn2)可以调用recv方法接收数据。需要注意的是,如果接收方没有数据可读,recv方法会阻塞,直到有数据到达或连接被关闭。在这种情况下,接收方会抛出EOFError异常。

以下是一个示例,展示了如何在两个进程之间使用Pipe进行通信:

# -*- coding: utf-8 -*-import multiprocessingimport randomimport time, osdef proc_send(pipe, urls):    for url in urls:        print(f"Process ({os.getpid()}) send: {url}")        pipe.send(url)        time.sleep(random.random())def proc_recv(pipe):    while True:        print(f"Process ({os.getpid()}) rev: {pipe.recv()}")        time.sleep(random.random())if __name__ == '__main__':    pipe = multiprocessing.Pipe()    p1 = multiprocessing.Process(        target=proc_send,        args=(pipe[0], ['url_' + str(i) for i in range(10)])    )    p2 = multiprocessing.Process(target=proc_recv, args=(pipe[1],))    p1.start()    p2.start()    p1.join()    p2.join()

运行上述代码,输出结果如下:

Process (12148) send: url_0Process (18820) rev: url_0Process (12148) send: url_1Process (18820) rev: url_1Process (12148) send: url_2Process (18820) rev: url_2Process (12148) send: url_3Process (18820) rev: url_3Process (12148) send: url_4Process (18820) rev: url_4Process (12148) send: url_5Process (18820) rev: url_5Process (18820) rev: url_6Process (12148) send: url_6Process (18820) rev: url_6Process (12148) send: url_7Process (18820) rev: url_7Process (12148) send: url_8Process (18820) rev: url_8Process (12148) send: url_9Process (18820) rev: url_9

这个示例展示了如何在两个进程之间通过Pipe进行双向通信。发送进程(proc_send)不断发送数据,接收进程(proc_recv)则持续接收并打印数据。由于Pipe支持双工通信,接收进程可以同时接收多个数据包。如果没有数据可接收,recv方法会阻塞直到数据到达或连接关闭。

转载地址:http://fiofk.baihongyu.com/

你可能感兴趣的文章
python语音播放
查看>>
python语言:装饰器原理
查看>>
Python 交互式数据可视化详解
查看>>
python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
查看>>
Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
查看>>
Python 从数据库中存储和检索密码的最安全方法
查看>>
Python语言及其应用 - 知识点遍历
查看>>
Python 优化提速的 8 个小技巧
查看>>
Python 余弦相似度与皮尔逊相关系数 计算
查看>>
python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
查看>>
python 使用filetype校验文件
查看>>
Python 使用flush函数将缓冲区数据立即写磁盘
查看>>
python 使用in判断不准确,in不好使
查看>>
Python 使用pandas 进行查询和统计详解
查看>>
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>