Python之路PythonThread,第三篇,进程3
Posted 微子天明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路PythonThread,第三篇,进程3相关的知识,希望对你有一定的参考价值。
python3 进程3
管道
在内存中开辟一个管道空间,对多个进程可见。 在通信形式上形成一种约束;
linux 文件类型
b c d - l s p
目录 普通文件 链接 套接字 管道
multiprocessing -----> Pipe函数
Pipe(duplex)
功能:创建一个管道
参数:duplex 默认为True 表示管道为双向管道(全双工);
如果设置为False, 则表示管道为单向管道;
返回值:返回两个管道流对象,分配表示管道的两端;
如果参数为True(默认),两个对象均可发送接收;
如果为False时,则第一个对象只能接收,第二个对象只能发送;
说明:1, 向管道发送数据使用send()函数,从管道接收数据使用recv() 函数;
2,recv() 函数为阻塞函数,当管道中数据为空时会阻塞;
3,一次recv() ,只能接收一次send()的内容;
4,send() 可以发送字符串数字列表等多种类型数据;
1 from multiprocessing import Process,Pipe 2 import os,time 3 4 #创建管道对象 5 #当参数为False的时候child只能recv parent只能send 6 # child_conn,parent_conn = Pipe(False) 7 8 child_conn,parent_conn = Pipe() 9 10 #子进程函数 11 def fun(name): 12 time.sleep(1) 13 #发送一个字符串到管道 14 child_conn.send(‘hello‘ + str(name)) 15 print(os.getppid(),"----",os.getpid()) 16 17 jobs = [] 18 #创建5个子进程 19 for i in range(5): 20 p = Process(target = fun,args = (i,)) 21 jobs.append(p) 22 p.start() 23 24 for i in range(5): 25 data = parent_conn.recv() 26 print(data) 27 28 for i in jobs: 29 i.join()
消息队列:
multiprocessing ---> Queue
在内存中开辟一个队列模型,用来存放消息,任何拥有队列队形的进程都可以进行消息的存放和取出;
Queue(maxsize = 0)
功能:创建一个消息队列对象;
参数:maxsize 默认为0 表示消息队列可以存放的消息由系统自动分配的空间而定;
> 0 的正整数 表示队列中最多存放多少条消息;
返回值:消息队列对象;
q.put()
1,向消息队列中存放一条消息,当消息队列满的时候,会阻塞;
2, 存放的消息类型可以是数字,列表,字符串等;
q.full()
判断队列是否为满, 如果满则返回True,否则返回False;
q.qsize()
查看当前队列中消息数量;
q.get()
获取消息,每次获取一条; 当消息队列为空时,则为阻塞;
说明: put() 、get() 中block参数和timeout参数
block默认为True,表示两个函数都是阻塞函数;
如果设置为False, 则表示不阻塞;
timeout 当block设置为True时,表示超时等待时间;
1 from multiprocessing import Queue 2 3 #创建消息队列对象 4 q = Queue(3) 5 6 i = 0 7 # 存放消息 8 while True: 9 #判断队列是否满了 10 if q.full(): 11 print("queue is full") 12 break 13 q.put("hello" + str(i)) 14 i += 1 15 16 print("当前队列有%d条消息"%q.qsize()) 17 18 for i in range(q.qsize()): 19 print("获取消息%s"%q.get()) 20 21 print("is empty?",q.empty()) 22 23 print(q.get(True,3)) 24 25 print("process over")
以上是关于Python之路PythonThread,第三篇,进程3的主要内容,如果未能解决你的问题,请参考以下文章