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 ...
随机推荐
- 实践:IIS7下访问ashx页面,显示404
问题描述 1.路径什么的都对,这方面的原因就不要想了 2.在我的电脑上可以,在同事的电脑上不可以 方案1:未注册ashx的处理应用程序 也就是不知道IIS不知道用什么应用程序处理ashx文件,解决办法 ...
- 奔跑吧vivado
上一节一上来就是Linux,不是炫耀我们的MiZ702能跑Linux,而是为了方便的把外设一次性测试完.大家都知道MiZ702精华在于FPGA与ARM的完美融合,就像太极一样阴阳调和--软中有 ...
- 【php增删改查实例】第七节 - 部门管理模块(画一个datagrid表格)
在easyui中,datagrid组件需要用一个table标签去渲染. <table id="grid0" title="部门管理" class=&quo ...
- python 回溯法 子集树模板 系列 —— 2、迷宫问题
问题 给定一个迷宫,入口已知.问是否有路径从入口到出口,若有则输出一条这样的路径.注意移动可以从上.下.左.右.上左.上右.下左.下右八个方向进行.迷宫输入0表示可走,输入1表示墙.为方便起见,用1将 ...
- python 23 种 设计模式
频率 所属类型 模式名称 模式 简单定义 5 创建型 Singleton 单件 保证一个类只有一个实例,并提供一个访问它的全局访问点. 4 创建型 Abstract Factory 抽象工厂 提供一个 ...
- 小内存VPS apache并发控制参数prefork调优
小内存VPS优化(使用wdcp lnamp一键包安装环境的情况下): 1.主要优化perfork模式下几个参数,防止开启过多的httpd进程占用大量内存导致内存满:在wdcp下修改的httpd配置文件 ...
- python3 str或bytes转换函数
str或bytes始终返回为str #!/usr/bin/env python # -*- coding: utf-8 -*- def to_str(bytes_or_str): if isinsta ...
- C# Language Specification 5.0 (翻译)第四章 类型
C# 语言的类型分为两大类:值类型(value type)和引用类型(reference type),而它们又都同时具有至少一个类型形参的泛型类型(generic type).类型形参(type pa ...
- 代理神器allproxy
背景 allproxy意为all as proxy,即是说所有设备均可以成为一个网络代理,唯一的要求就是有网络访问权限. 一般的代理软件要求宿主机必须有公网地址,然后才能把网络代理出去,但在实际情况下 ...
- Tortoisegit生成SSH密钥一次性输入密码
一.找到Tortoisegit 的安装目录,进入bin目录下,找到puttygen.exe并打开,点击Generate按钮,会看到上面出现绿色滚动条,此时要不停移动鼠标,进度会比较快,完成后,就会看到 ...