Python 进程间通信 Queue / Pipe - Python零基础入门教程

目录

  • 一.前言
    • 1.使用 Queue 线程间通信
    • 2.使用 Queue 进程间通信,适用于多个进程之间通信
    • 3.使用 Pipe 进程间通信,适用于两个进程之间通信(一对一)
  • 二.python 进程间通信 Queue/Pipe 使用
    • 1.使用 Queue 进程间通信
    • 2.使用 Pipe 进程间通信
  • 三.测试 queue.Queue 来完成进程间通信能否成功?
  • 四.猜你喜欢

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

一.前言

1.在前一篇文章  Python 进程 Process 与线程 threading 区别  中讲到线程 threading 共享内存地址,进程与进程 Peocess 之间相互独立,互不影响(相当于深拷贝);

2.在线程间通信的时候可以使用 Queue 模块完成,进程间通信也可以通过 Queue 完成,但是此 Queue 并非线程的 Queue ,进程间通信 Queue 是将数据 pickle 后传给另一个进程的 Queue,用于父进程与子进程之间的通信或同一父进程的子进程之间通信;

1.使用 Queue 线程间通信

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 进程间通信 Queue / Pipe.py
@Time:2021/05/09 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""#导入线程相关模块
import threading
import queueq = queue.Queue()

2.使用 Queue 进程间通信,适用于多个进程之间通信

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 进程间通信 Queue / Pipe.py
@Time:2021/05/09 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""# 导入进程相关模块
from multiprocessing import Process
from multiprocessing import Queueq = Queue()

3.使用 Pipe 进程间通信,适用于两个进程之间通信(一对一)

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 进程间通信 Queue / Pipe.py
@Time:2021/05/09 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""# 导入进程相关模块
from multiprocessing import Process
from multiprocessing import Pipepipe = Pipe()

二.python 进程间通信 Queue/Pipe 使用

Python 提供了多种进程通信的方式,主要 Queue 和 Pipe 这两种方式,Queue 用于多个进程间实现通信,Pipe 用于两个进程的通信;

1.使用 Queue 进程间通信

  • put :以插入数据到队列中,他还有两个可选参数:blocked 和 timeout 。详情自行百度
  • get :从队列读取并且删除一个元素。同样还有两个可选参数:blocked 和 timeout , 详情自行百度
 # !usr/bin/env python# -_- coding:utf-8 \__-"""@Author:猿说编程@Blog(个人博客地址): www.codersrc.com@File:Python 进程间通信 Queue / Pipe.py@Time:2021/05/09 07:37@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""from multiprocessing import Processfrom multiprocessing import Queueimport os,time,random#写数据进程执行的代码def proc_write(q,urls):print ('Process is write....')for url in urls:q.put(url)print ('put %s to queue... ' %url)time.sleep(random.random())#读数据进程的代码def proc_read(q):print('Process is reading...')while True:url = q.get(True)print('Get %s from queue' %url)if **name** == '**main**': #父进程创建 Queue,并传给各个子进程q = Queue()proc_write1 = Process(target=proc_write,args=(q,['url_1','url_2','url_3']))proc_write2 = Process(target=proc_write,args=(q,['url_4','url_5','url_6']))proc_reader = Process(target=proc_read,args=(q,)) #启动子进程,写入proc_write1.start()proc_write2.start()proc_reader.start()#等待proc_write1结束proc_write1.join()proc_write2.join()#proc_raader进程是死循环,强制结束proc_reader.terminate()print("mian")'''输出结果:Process is write....put url_1 to queue...Process is write....put url_4 to queue...Process is reading...Get url_1 from queueGet url_4 from queueput url_5 to queue...Get url_5 from queueput url_2 to queue...Get url_2 from queueput url_3 to queue...Get url_3 from queueput url_6 to queue...Get url_6 from queuemian'''

2.使用 Pipe 进程间通信

Pipe 常用于两个进程,两个进程分别位于管道的两端 Pipe 方法返回(conn1,conn2)代表一个管道的两个端,Pipe 方法有 duplex 参数,默认为 True ,即全双工模式,若为 FALSE ,conn1 只负责接收信息,conn2 负责发送, Pipe 同样也包含两个方法:

send : 发送信息;

recv : 接收信息;

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 进程间通信 Queue / Pipe.py
@Time:2021/05/09 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""from multiprocessing import Process
from multiprocessing import Pipe
import os,time,random
#写数据进程执行的代码
def proc_send(pipe,urls):#print 'Process is write....'for url in urls:print ('Process is send :%s' %url)pipe.send(url)time.sleep(random.random())#读数据进程的代码
def proc_recv(pipe):while True:print('Process rev:%s' %pipe.recv())time.sleep(random.random())if __name__ == '__main__':#父进程创建pipe,并传给各个子进程pipe = Pipe()p1 = Process(target=proc_send,args=(pipe[0],['url_'+str(i) for i in range(10) ]))p2 = Process(target=proc_recv,args=(pipe[1],))#启动子进程,写入p1.start()p2.start()p1.join()p2.terminate()print("mian")'''
输出结果:Process is send :url_0
Process rev:url_0
Process is send :url_1
Process rev:url_1
Process is send :url_2
Process rev:url_2
Process is send :url_3
Process rev:url_3
Process is send :url_4
Process rev:url_4
Process is send :url_5
Process is send :url_6
Process is send :url_7
Process rev:url_5
Process is send :url_8
Process is send :url_9
Process rev:url_6
mian
'''

三.测试 queue.Queue 来完成进程间通信能否成功?

当然我们也可以尝试使用线程 threading 的 Queue 是否能完成线程间通信,示例代码如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 进程间通信 Queue / Pipe.py
@Time:2021/05/09 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""from multiprocessing import Process
# from multiprocessing import Queue     # 进程间通信Queue,两者不要混淆
import queue                            # 线程间通信queue.Queue,两者不要混淆
import timedef p_put(q,*args):q.put(args)print('Has put %s' % args)def p_get(q,*args):print('%s wait to get...' % args)print(q.get())print('%s got it' % args)if __name__ == "__main__":q = queue.Queue()p1 = Process(target=p_put, args=(q,'p1', ))p2 = Process(target=p_get, args=(q,'p2', ))p1.start()p2.start()'''
直接异常报错:Traceback (most recent call last):File "E:/Project/python_project/untitled10/123.py", line 38, in <module>p1.start()File "G:\ProgramData\Anaconda3\lib\multiprocessing\process.py", line 105, in startself._popen = self._Popen(self)File "G:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 223, in _Popenreturn _default_context.get_context().Process._Popen(process_obj)File "G:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 322, in _Popenreturn Popen(process_obj)File "G:\ProgramData\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__reduction.dump(process_obj, to_child)File "G:\ProgramData\Anaconda3\lib\multiprocessing\reduction.py", line 60, in dumpForkingPickler(file, protocol).dump(obj)
TypeError: can't pickle _thread.lock objects
'''

四.猜你喜欢

  1. Python 条件推导式
  2. Python 列表推导式
  3. Python 字典推导式
  4. Python 不定长参数 *argc/**kargcs
  5. Python 匿名函数 lambda
  6. Python return 逻辑判断表达式
  7. Python is 和 == 区别
  8. Python 可变数据类型和不可变数据类型
  9. Python 浅拷贝和深拷贝
  10. Python 异常处理
  11. Python 线程创建和传参
  12. Python 线程互斥锁 Lock
  13. Python 线程时间 Event
  14. Python 线程条件变量 Condition
  15. Python 线程定时器 Timer
  16. Python 线程信号量 Semaphore
  17. Python 线程障碍对象 Barrier
  18. Python 线程队列 Queue – FIFO
  19. Python 线程队列 LifoQueue – LIFO
  20. Python 线程优先队列 PriorityQueue
  21. Python 线程池 ThreadPoolExecutor(一)
  22. Python 线程池 ThreadPoolExecutor(二)
  23. Python 进程 Process 模块
  24. Python 进程 Process 与线程 threading 区别
  25. Python 进程间通信 Queue / Pipe

未经允许不得转载:猿说编程 » Python 进程间通信 Queue / Pipe

[喜欢(1)](javascript:😉 [打赏](javascript:😉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub服务中断24小时11分钟事故分析报告

来源 | The GitHub Blog译者 | 无明UTC 时间 10 月 21 日 22:52&#xff0c;为了更换发生故障的 100G 光纤设备&#xff0c;美国东海岸网络中心与美国东海岸数据中心之间的连接被断开。连接在 43 秒后恢复&#xff0c;但这次短暂的中断引发了一系列事故&#xff0c;导致 24 小时…

Python 进程互斥锁 Lock - Python零基础入门教程

目录 一.Python 线程互斥锁和进程互斥锁 1.创建线程互斥锁2.创建进程互斥锁 二.进程互斥锁 Lock 函数介绍三.进程互斥锁 Lock 使用 案例一:使用进程&#xff0c;但不使用互斥锁案例二&#xff1a;进程互斥锁的使用案例三&#xff1a;对全局变量累计求和看看计算结果 四.猜你喜…

BugkuCTF-Crypto题MathEnglish

题目hint:口语需要读出来&#xff1f; 下载文件&#xff0c;打开 得到一些数字&#xff1a; 21 33 1 22 3 44 54 5 1 35 54 3 35 41 52 13 出题人给了hint2&#xff0c;让我们往元音上想 然后找到了一篇元音密码的文章 简单替换一下得到flag&#xff1a;bugku{yuanyinpwd}

Cloud一分钟|茅台4.5亿入股云上贵州大数据,后者已接管苹果中国iCloud; 阿里云进入印度市场,增长速度远超当地平均水平...

Hello&#xff0c;everyone&#xff1a;11月05日早&#xff0c;星期一&#xff0c;新的一天祝大家工作愉快&#xff01;一分钟新闻时间&#xff1a;完1.微信群&#xff1a;添加小编微信&#xff1a;tangguoyemeng&#xff0c;备注“进群姓名公司职位”即可&#xff0c;加入【云…

BugkuCTF-WEB题文件包含

1.打开网页&#xff0c;点击click me? no链接 URL栏里显示&#xff1a;http://114.67.246.176:15077/index.php?fileshow.php&#xff0c;可能存在文件包含漏洞 这里介绍一下&#xff1a;php:// 协议 条件&#xff1a; allow_url_fopen:off/on allow_url_include :仅php:…

Python 进程池 multiprocessing.Pool - Python零基础入门教程

目录 一.Python 进程池 multiprocessing.Pool 介绍二.Python 进程池 multiprocessing.Pool 使用三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 Python 进程池 Pool 和前面讲解的** Python 线程池** 类似&#xff0c;虽然使用多进程能提…

Cloud一分钟 | Facebook隐私泄露事件继续发酵,黑客明码标价出售聊天信息

Hello&#xff0c;everyone&#xff1a;11月06日早&#xff0c;星期二&#xff0c;新的一天祝大家工作愉快&#xff01;一分钟新闻时间&#xff1a;完1.微信群&#xff1a;添加小编微信&#xff1a;tangguoyemeng&#xff0c;备注“进群姓名公司职位”即可&#xff0c;加入【云…

php:// 协议

这里介绍一下&#xff1a;php:// 协议 条件&#xff1a; allow_url_fopen:off/on allow_url_include :仅php://input php://stdin php://memory php://temp 需要on 作用&#xff1a; php:// 访问各个输入/输出流&#xff08;I/O streams&#xff09;&#xff0c;在CTF里经常…

Python GIL 锁 - Python零基础入门教程

目录 一.并行和并发二.GIL 锁 案例一&#xff1a;单核多线程案例二&#xff1a;单核多线程案例三&#xff1a;双核多线程 三.如何解决 GIL 锁问题四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 Python 中除了线程互斥锁 Lock 还有 GIL …

Facebook隐私泄露事件继续发酵,黑客明码标价出售聊天信息

2018年对于Facebook来说&#xff0c;是命运多舛的一年&#xff0c;此前曝光的隐私泄露事件如今又在持续发酵。据BBC近日报道&#xff0c;有黑客宣称其已经窃取1.2亿个Facebook用户账号的私人信息&#xff0c;并试图以每个账户10美分的价格在网站上出售&#xff0c;目前也公布了…

BugkuCTF-WEB题好像需要密码

一个五位数密码 老实说burp跑的话能跑一天 89999次 burp真的太慢了 这次用python脚本 顺便学一学requests库 输入密码&#xff0c;得到flag

为了释放AI在边缘计算的力量 英特尔又出手了

无论是现在还是未来&#xff0c;生活中AI的影子都无处不在&#xff0c;智能机器人会为你安排行程、提供可行性方案&#xff1b;智能医疗可以帮助人们提升医疗技术水平&#xff0c;改善就医条件和环境&#xff1b;在自然灾害发生时处理海量信息&#xff1b;购物认证时&#xff0…

Python print 函数- Python零基础入门教程

目录 一.Python print 函数简介二.Python print 函数语法三.Python print 函数使用 1.objects 参数2.sep 参数3.end 参数4.flush 参数 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python print 函数简介 Python 中内置函数我们使…

BugkuCTF-Crypto题python_jail

题目可通过nc远程连接 输入nc建立连接 测试发现最多只能输入10个字符&#xff0c;要想有输出&#xff0c;需要print() &#xff08;7个字符&#xff09; 若print(flag)则有11个字符&#xff0c;超出限制&#xff0c;报错 可利用python里help()函数&#xff0c;借报错信息带出f…

Python format 函数- Python零基础入门教程

目录 一.format 函数简介 1.format 函数不设置下标2.format 函数设置下标 二.format 函数实战三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.format 函数简介 format 函数主要是用来构造字符串&#xff0c;基本语法是通过 {} 符号操…

Cloud一分钟 | 北京13部门召开座谈会,要求阿里京东等平台规范开展双11促销活动...

Hello&#xff0c;everyone&#xff1a;11月07日早&#xff0c;星期三&#xff0c;新的一天祝大家工作愉快&#xff01;一分钟新闻时间&#xff1a;完1.微信群&#xff1a;添加小编微信&#xff1a;tangguoyemeng&#xff0c;备注“进群姓名公司职位”即可&#xff0c;加入【云…

BugkuCTF-Reverse题love

下载附件 先查壳 发现没加壳 再拖进 IDA 分析 按shiftF12查找字符串&#xff0c;可以看到如下 Base64 加密的痕迹&#xff0c;可判断基本是一个反解 flag 的题目 找到主函数按F5查看伪代码&#xff0c;如下&#xff1a; 可以发现这样的一个关键函数&#xff0c;也就是会将 …

Python type 函数- Python零基础入门教程

目录 一.type 函数简介 type 函数语法 二.type 函数实战三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.type 函数简介 Python 变量&#xff0c;也称 Python 数据类型。Python 变量一共六种类型&#xff1a;整数/浮点数/字符串/BOOL…

技术争鸣!七大主题报告,四大技术专题,AI开发者大会首日议程全回顾

技术争鸣&#xff0c;座无虚席&#xff01;11 月 8 日&#xff0c;北京诺金酒店&#xff0c;2018 AI开发者大会&#xff08;AI NEXTCon&#xff09;第一天议程圆满结束&#xff0c;这是值得铭记的一天。上午 9 点&#xff0c;由中国 IT 社区 CSDN 与硅谷 AI 社区 AICamp 联合出…

BugkuCTF-Reverse题Timer(阿里CTF)

知识点 JEB相当于Windows平台上的IDA smali代码:双击Bytecode,出现smali代码;相较于C之汇编,那么smali之于Java onCreate: 一个activity启动回调的第一个函数就是onCreate,这个函数主要做这个activity启动的一些需要的初始操作的工作。 onCreate之后调用了还有onRestart()和o…