湖州建设培训入口网站,做网站最大的公司,2016最新wordpress模板下载,百度搜索引擎的优缺点Process之间肯定是需要通信的#xff0c;操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing模块包装了底层的机制#xff0c;提供了Queue、Pipes等多种方式来交换数据。
一、我们以Queue为例#xff0c;在父进程中创建两个子进程#xff0c;一个往Queue…Process之间肯定是需要通信的操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing模块包装了底层的机制提供了Queue、Pipes等多种方式来交换数据。
一、我们以Queue为例在父进程中创建两个子进程一个往Queue里写数据一个从Queue里读数据
from multiprocessing import Process,Queue
import os,time,random
# 写数据进程执行的代码
def write(q):print(Process to write: %s% os.getgid())for value in [A,B,C]:print(Put %s to queue... % value)q.put(value)time.sleep(random.random())#读数据进程执行的代码
def read(q):print(Process to read: %s % os.getgid())while True:value q.get(True)print(Get %s from queue. % value)if __name__ __main__:# 父进程创建Queue并传给各个子进程q Queue()pw Process(targetwrite, args(q,))pr Process(targetread, args(q,))#启动子进程pw,写入pw.start()#启动子进程pr,读取pr.start()#等待pw结束pw.join()#pr进程这里是死循环无法等待其结束只能强行终止pr.terminate()
输出
Process to write: 15582 Put A to queue... Process to read: 15583 Get A from queue. Put B to queue... Get B from queue. Put C to queue... Get C from queue.
在Unix/Linux下multiprocessing模块封装了fork()调用使我们不需要关注fork()的细节。由于Windows没有fork调用因此multiprocessing需要“模拟”出fork的效果父进程所有Python对象都必须通过pickle序列化再传到子进程去所有如果multiprocessing在Windows下调用失败了要先考虑是不是pickle失败了。
二、管道Pipes 现有2个进程A和B他们都在内存中开辟了空间那么我们在内存中再开辟一个空间C作用是连接这两个进程的。对于进程来说内存空间是可以共享的任何一个进程都可以使用内存内存当中的空间是用地址来标记的我们通过查找某一个地址就能找到这个内存A进程可以不断的向C空间输送东西B进程可以不断的从C空间读取东西这就是进程间的通信 这个通信方式的原理类似于用文件通信一个进程往文件里写另外一个进程从文件里读取最大的不同在于管道里C的空间是开辟在内存当中第一是他不容易被截获第二是进程结束后内存空间他会自动的释放掉文件就不能自动释放掉。第三就是内存的传输是不需要和磁盘交互所以相比文件管道的传输效率要高很多这就是管道的基本原理。 管道在信息传输上是以流的方式传输 也就是你从A进程不断的写入B进程源源不断的读出A进程先写入的就会被B进程先读出后写进来的就会被后读出管道不仅仅可以让A进程写C内存空间收也可以B进程写C内存空间收也就是双向通信单项通信叫做半双工双向叫做全双工。
2.管道本质 在内存中开辟一个新的空间对多个进程可见在通信形式上形成一种约束
3.创建管道 multiprocessing-------------Pipe 1.首先理解Pipe是什么有人理解为类那到底是什么 from multiprocessing import Pipe type(Pipe) class method 可以看到是个方法也就是函数是通过函数的返回值来完成工作的不是类
----------------------
待完善 参考
1、https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431927781401bb47ccf187b24c3b955157bb12c5882d000
2、https://blog.csdn.net/weixin_39859512/article/details/80898340