详解Python进程间通信之命名管道
发布时间 - 2026-01-11 02:59:59 点击率:次管道是一种简单的FIFO通信信道,它是单向通信的。 通常启动进程创建一个管道,然后这个进程创建一个或者多个进程子进程接受管道信息,由于管道是单向通信,所以经常需要创建两个管道来实现双向通信。

命名管道是对传统管道的扩展,默认的管道是匿名管道,只在程序运行时存在;而命名管道是持久化的,当不需要时需要删除它。
命名管道使用文件系统,由mkfifo()方法创建。一旦创建了,两个独立的进程都可以访问它,一个读,另外一个写。
命名管道支持阻塞读和阻塞写操作: 如果一个进程打开文件读,它会阻塞直到另外一个进程写。 但是我们可以指定O_NONBLOCK选项来启用非阻塞模式。
命名管道必须以只读或者只写的模式打开,它不能以读+写的模式打开,因为它时单向通信。如果要实现双向通信,必须打开两个命名管道。
下面是一个 Python 使用命名管道来实现进程间通信的例子
Server 端
import os, time
read_path = "/tmp/pipe.in"
write_path = "/tmp/pipe.out"
if os.path.exists(read_path):
os.remove(read_path)
if os.path.exists(write_path):
os.remove(write_path)
os.mkfifo(write_path)
os.mkfifo(read_path)
rf = os.open(read_path, os.O_RDONLY)
wf = os.open(write_path, os.O_SYNC | os.O_CREAT | os.O_RDWR)
while True:
s = os.read(rf, 1024)
print "received msg: %s" % s
if len(s) == 0:
time.sleep(1)
continue
if "exit" in s:
break
os.write(wf, s)
os.close(rf)
os.close(wf)
Client 端
import os
import time
write_path = "/tmp/pipe.in"
read_path = "/tmp/pipe.out"
wf = os.open(write_path, os.O_SYNC | os.O_CREAT | os.O_RDWR)
rf = None
for i in range(1, 11):
msg = "msg " + str(i)
len_send = os.write(wf, msg)
print "sent msg: %s" % msg
if rf is None:
rf = os.open(read_path, os.O_RDONLY)
s = os.read(rf, 1024)
if len(s) == 0:
break
print "received msg: %s" % s
time.sleep(1)
os.write(wf, 'exit')
os.close(rf)
os.close(wf)
测试
- 首先运行server.py
- 然后运行client.py
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Python进程通信
# 命名管道
# Python
# 进程间通信
# 管道
# Python进程间通信 multiProcessing Queue队列实现详解
# Python进程间通信Queue消息队列用法分析
# Python进程间通信Queue实例解析
# Python实现进程同步和通信的方法
# python多进程实现进程间通信实例
# Python进程间通信之共享内存详解
# Python进程间通信用法实例
# python进程间通信Queue工作过程详解
# 另外一个
# 来实现
# 创建一个
# 是一个
# 是一种
# 多个
# 不需要
# 信道
# 它是
# 我们可以
# 因为它
# 只在
# 它会
# 文件系统
# 大家多多
# 时需
# 只写
# break
# close
# write
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
浅述节点的创建及常见功能的实现
iOS验证手机号的正则表达式
装修招标网站设计制作流程,装修招标流程?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
LinuxCD持续部署教程_自动发布与回滚机制
魔毅自助建站系统:模板定制与SEO优化一键生成指南
深入理解Android中的xmlns:tools属性
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
JS实现鼠标移上去显示图片或微信二维码
如何在自有机房高效搭建专业网站?
黑客如何利用漏洞与弱口令入侵网站服务器?
jQuery中的100个技巧汇总
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何在万网利用已有域名快速建站?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何挑选优质建站一级代理提升网站排名?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
php json中文编码为null的解决办法
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
利用vue写todolist单页应用
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
JS碰撞运动实现方法详解
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
中山网站推广排名,中山信息港登录入口?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
JavaScript如何实现音频处理_Web Audio API如何工作?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
如何为不同团队 ID 动态生成多个非值班状态按钮
香港网站服务器数量如何影响SEO优化效果?
手机软键盘弹出时影响布局的解决方法
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何实现事件和监听器?(Event & Listener实战)
网站页面设计需要考虑到这些问题
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
html5的keygen标签为什么废弃_替代方案说明【解答】
jquery插件bootstrapValidator表单验证详解

