1.队列1
# 进程间通信(IPC(Inter-Process Communication)) # 进程之间通信用的队列(Queue),不是之前说的普通队列(import queue) # 概念介绍 # 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递 # Queue([maxsize]) # 创建共享的进程队列 # 参数:maxsize是队列中允许的最大项数 # 底层队列使用管道和锁定实现 #q.get( [ block [, timeout]] ) #返回q队列中的一个项目,如果q为空,此方法将阻塞,直到队列中有项目可用为止,block用于控制阻塞的行为 # 默认为True,如果设置为False,将引发Queue.Empty异常(定义在Queue模块中)。timeout是可选超时时间 # 用在阻塞模式中,如果在制定的时间间隔内没有项目变为可用,将引发Queue.Empty异常 # q.get_nowait() # 同q.get(False)方法 # q.put(item [, block[, timeout]]) #将item放入队列,如果队列已满,此方法将阻塞至有空间可用为止,block用于控制阻塞的行为 # 默认为True,如果设置为False,将引发Queue.Empty异常(定义在Queue模块中) # timeout指定在阻塞模式中等待可用空间的时间长短,超时后将引发Queue.Full异常 # q.qsize() # 返回队列中目前项目的正确数量,次函数的结果并不可靠,因为在返回结果和在稍后程序中使用结果之间,队列中 # 可能添加或删除了项目,在某些系统上,此方法可能引发NotImplementedError异常# from multiprocessing import Queue## q = Queue(5) # 创建一个进程间通信用的队列,队列大小是5# q.put(1) # 向队列中放数据,当放入到队列的数据超过上限个时,会阻塞在这里,只有当队列中的数据被取走才会接触阻塞向队列里继续放数据# q.put(1) # 向队列中放数据# q.put(1) # 向队列中放数据# q.put(1) # 向队列中放数据# q.put(1) # 向队列中放数据# print(q.full()) # 查看队列是否满了,True表示满了,False表示没有满# #q.put(1) # 向队列中放数据 当放入到队列的数据超过上限个时,会阻塞在这里,只有当队列中的数据被取走才会接触阻塞向队列里继续放数据# print(q.get()) # 从队列中取数据,当队列中的数据被取干净之后,在调用get则会阻塞在这里,等待队列中有数据# print(q.empty()) # 查询队列是否为空, False表示队列非空,True表示队列已经空了# print(q.get())# print(q.get())# print(q.get())# print(q.get())# try:# print(q.get_nowait()) # 取值,没有值则不阻塞在这里,会抛出异常报错# except:# print('队列已空')from multiprocessing import Queuefrom multiprocessing import Process# 如果向队列中放数据,则处于的是生产队列的一方def produce(q): ''' 生产数据的函数,向队列中存放数据 :return: ''' q.put('hello')# 消耗数据的一方def consume(q): ''' 消耗数据的一方,读取队列中的数据 :param q: :return: ''' print(q.get())if __name__ == '__main__': q = Queue() # 创建队列时,没有参数,则表示队列无上限 p = Process(target=produce, args=(q, )) p.start() c = Process(target=consume, args=(q, )) c.start()