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")

原文地址:https://www.cnblogs.com/weizitianming/p/9190317.html

时间: 2024-08-29 22:39:56

Python之路PythonThread,第三篇,进程3的相关文章

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

Python之路【第三篇补充】:Python基础(三)

lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = ‘luotianshuai' else: name = 'shuaige' # 三元运算 name = 'luotianshuai' if 1 == 1 else 'shuaige' #这个就是if else的一个简写. #if 条件成立的时候name为'luotianshuai' 不成立的时候为:'shuaige' ,语法糖! 那么函数有没有

Python之路【第三篇】python基础 之基本数据类型 补充

字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing '%' string formatting operator

Python之路【第三篇】:Python基础(16)——函数动态参数

# 动态参数:# * 1星默认将传入的参数,全部放置在元组中,f1(*[1`1,22,33,44])# 带1个星的用来处理那些默认按照顺序传的值 # # #示例# def func(*args):# print (args,type(args))# # 执行方式一# func(11,33,4,4454,5)# # 执行方式二# li = [11,2,2,3,3,4,54]# func(*li)# # 输出# # (11, 33, 4, 4454, 5) <class 'tuple'># # (

Python之路【第三篇】:Python基础(13)——函数普通参数

# 普通参数:严格按照顺利,将实际参数赋值给形式参数 # def send(name):# ...# send("eric") def sendmail(mail_addr): #第一步.创建函数 (mail_addr是形式参数)第三步.mail_addr = {str}'[email protected]' try: # 这个功能是捕捉异常,目前还没学到. import smtplib from email.mime.text import MIMEText from email.u

Python之路【第三篇】:Python基础(9)——set集合

# 1.set集合# 集合是一个无序不重复元素的序列.# 基本功能是进行成员关系测试和删除重复元素 # 回忆:# li = [] 创建一个列表,这种方法在python内部实际是会调用list()这种方法.# list()创建列表的另外一种方法# 注:类后面加一个括号(),就是调用了类的_init_方法,执行这个方法的时候,需要接收一个参数.# 比如在list((11,22,33,44))里面就传了一个元组进来.# 在_init_内部实际是执行了一个for循环,这个for循环就去循环元组里面的所有

Python之路【第三篇】:Python基础之杂货铺

字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 %[(name)][flags][width].[precision]typecode ● (name) 可选,用于选择指定的key ● flags 可选,可供选择的值有: ● + 右对齐:正数前加正好,负数前加负号: ● - 左对齐:正数前无符号,负数前加负号: ● 空格 右对齐:正数前加空格,负

Python之路【第三篇】:Python基础(18)——函数万能参数

# 万能参数:既带一个星也带两个星# #*args, **kwargs 一般都用这个表示 def func(*args, **kwargs): ## # def func(**kwargs,*args): # 两星和一星的位置不能互换,必须一星的在前面,两星的在后面. print(args,type(args)) print(kwargs,type(kwargs))func(11,22,33,44,k1="v1",k2="v2")# #默认情况会自动把11,22,3

Python之路【第三篇】:Python基础(17)——函数动态参数

#动态参数:** 2星默认将传入的参数,全部放置在字典中f1(**{"kl":"v1", "k2":"v2"})#带2星的用来处理那些带有键值对的值,即一个key一个value的值 # 示例# def func(**kwargs):# print(kwargs,type(kwargs))# # 执行方式一# func(name='wupeiqi',age=18)# # 执行方式二# li = {'name':'wupeiqi'

Python之路【第三篇】:Python基础(15)——函数指定参数

# 指定参数:将实际参数赋值给指定的形式参数# # 示例# def send(name,xx = "ok"):# ...## send('[email protected]',name="你好") # # 练习1def send(mail_addr,content,): print(mail_addr,content,) # print("发送邮件成功:",mail_addr,content) return True send("[em