Python 进程间的通信
#-*-coding:utf-8-*-
'''python提供了多种进程间的通信方式,如:Queue,Pipe,Valie+Array等。
Queue与Pipe的区别在于Pipe常用来在两个进程间通信,Queue用来在多个进程间通信
Queue:
Put:用于插入数据到队列中(blocked,timeoutl两个可选参数,如果blocked为True(默认值)
并且timeout为正值,该方法会阻塞timeout指定时间,指导队列有剩余空间,如果超时,会抛出Queue.Full异常,
如果blocked为False,但Queue已满,会立即抛出Queue.Full异常)
Get:从队列读取并删除一个元素(blcoked,timeout两个可选参数,如果blocked为True(默认值)并且timeout为正值
name在等待时间内没有取到任何元素,会抛出Queue.Empty异常。如果blocked为False,则分为两种情况:
如果Queue有一个值可用,则立即返回该值;否则如果队列为空,则立即抛出Queue.Empty异常)
'''
#例子:在父进程中创建三个子进程,两个资金长王Queue中写入数据一个进程从Queue中读取数据
# from multiprocessing import Process,Queue
# import os,time,random
#
# #写数据进程执行的代码:
# def proc_write(q,urls):
# print('Process(%s) is writing...'%os.getcwd())
# for url in urls:
# q.put(url)
# print('Put %s to queue...'%url)
# time.sleep(random.random())
# #读数据进程执行的代码:
# def proc_read(q):
# print('Process(%s) is reading...'%os.getpid())
# 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_writer写入
# proc_write1.start()
# proc_write2.start()
# #启动子进程proc_reader读取
# proc_reader.start()
# #等待proc_writer结束:
# proc_write1.join()
# proc_write2.join()
# #proc_reader进程里是死循环无法等待其结束,只能强行终止
#
from multiprocessing import Pipe
'''Pipe常用在两个进程间进行通信,两个进程分别位于进程两端,Pipe方法返回(conn1,conn2)代表一个
管道的两端。Pipe方法有duplex参数,如果duplex为True(默认值)name这个管道是全双工模式,也就是说
conn1和conn2均可以收发,如果duplex为False,conn1只负责接收消息,conn2只负责发送消息。send
和recv方法分别是发送和接收消息的方法'''
#创建两个进程,一个进程通过Pipe发送数据一个进程通过Pipe接收数据
import multiprocessing
import random
import time,os
def proc_send(pipe,urls):
for url in urls:
print("Process(%s) send: %s" %(os.getpid(),url))
pipe.send(url)
time.sleep(random.random())
def proc_recv(pipe):
while True:
print("Process(%s) rev:%s"%(os.getpid,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()
摘自《Python爬虫开发与项目实战》
Python 进程间的通信的更多相关文章
- python进程间的通信
from multiprocessing import Queue, Process import time, random # 要写入的数据 list1 = ["java", & ...
- 2.Python进程间的通信之队列(Queue)和生产者消费者模型
一.队列 1.1 概念介绍-----multiprocess.Queue 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. Queue([maxsize] ...
- Python 多进程编程之 进程间的通信(在Pool中Queue)
Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...
- Python 多进程编程之 进程间的通信(Queue)
Python 多进程编程之 进程间的通信(Queue) 1,进程间通信Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法----这是操作系统开辟 ...
- python全栈开发day32-进程创建,进程同步,进程间的通信,进程池
一.内容总结 1.进程创建 1) Process:两种创建一个新进程的方法: 1.实例化Process,通过args=(,)元组形式传参,2创建类继承Process,类初始化的时候传参数 2) p.j ...
- Python网络编程(进程池、进程间的通信)
线程池的原理: 线程池是预先创建线程的一种技术.线程池在还没有任务到来之前, 创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态, 即均为启动,不消 ...
- 多任务-python实现-使用队列完成进程间的通信(2.1.8)
@ 目录 1.为什么要使用队列 2.python代码实现 1.为什么要使用队列 进程之间是互相独立的,而线程能够共享全局变量 所以如果进程间想要交换数据的话 只有通过进程间的通信,比如socket.太 ...
- Python 35 进程间的通信(IPC机制)、生产者消费者模型
一:进程间的通信(IPC):先进先出 管道:队列=管道+锁 from multiprocessing import Queue q=Queue(4) q.put(['first',],block=T ...
- c 进程间的通信
在上篇讲解了如何创建和调用进程 c 进程和系统调用 这篇文章就专门讲讲进程通信的问题 先来看一段下边的代码,这段代码的作用是根据关键字调用一个Python程序来检索RSS源,然后打开那个URL #in ...
随机推荐
- Latex数学公式编写
小叙闲言 一直想用latex来编辑文档,但是没有需求,所以也没有去学习一下,但是最近由于要大量敲数学公式,有了latex数学公式的需求,所以来稍稍总结学习一下 1.在MathType中编写Latex数 ...
- 不成功的RMAN恢复到其他机器的例子
事实上,RMAN备份的时候,如果是使用control file 来作catalog,那么一定要把control file和spfile恢复到另外的机器上面. 否则,会出现类似如下的错误: 原来的实例: ...
- Eclipse中JBoss插件配置
JBoss 服务器集成到Eclispe(考虑Eclipse版本Version: Indigo Service Release 2) http://www.cnblogs.com/sunddenly/p ...
- SSIS 组件属性整理
整理SSIS 组件的属性解释及其用法 一,ExecValueVariable属性 有些Task组件执行完成之后,会产生输出结果,称作Execution Value,例如,Execute SQL Tas ...
- 起步 - vue-router路由与页面间导航
vue-router 我们知道路由定义了一系列访问的地址规则,路由引擎根据这些规则匹配找到对应的处理页面,然后将请求转发给页进行处理.可以说所有的后端开发都是这样做的,而前端路由是不存在"请 ...
- LeetCode Search for a Range (二分查找)
题意 Given a sorted array of integers, find the starting and ending position of a given target value. ...
- ASP.NET Core采用Web Deploy方式发布到 Windows Server 2012 IIS上
小白一枚,租个服务器,发布下网站,满足下好奇心,讲的粗糙,请大家谅解哈~ 1.配置服务器环境.这部分网上教程比较多. (1)开启IIS,参考其他博客的,担心的话,将Web服务器(IIS)全选哈~ (2 ...
- 小程序swiper组件高度自适应【转载】
最近在做小程序开发,复制官方文档上的swiper组件实测后发现,图片不能自适应.网上找了几个版本测试都发现存在一些小问题,目前这个版本本人实测是最好用的.记录一下,方便日后使用. 感谢原创大神的帮助, ...
- kubeadm安装kubernetes 1.13.1集群完整部署记录
k8s是什么 Kubernetes简称为k8s,它是 Google 开源的容器集群管理系统.在 Docker 技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提 ...
- Linux内核分析 笔记二 操作系统是如何工作的 ——by王玥
一.知识要点 1.计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算 ...