8.进程间通信与进程池

进程间通信与进程池

进程间通信-Queue

通常利用multiprocessing模块的Queue实现多线程之间的数据传递,Queue本身是一个消息列队程序

  1. q=Queue()#若括号中没有指定最大可接受的消息数量或数量为负值,那么代表可接受的消息数量没有上限直到内存耗尽
  2. Queue.qsize():返回当前队列包含的消息数量
  3. Queue.empty():队列为空返回True
  4. Queue.full():队列为满返回True
  5. Queue.get([block[,timeout]]):获取队列中的一条消息,然后将其从队列中移除,block默认值为True
    1. 若block使用默认值,且没有设置timeout(单位秒),消息队列如果为空,此时程序将被阻塞(停在读取状态),直到从消息队列读到消息为止,如果设置了timeout,则会等待timeout秒。若还没有读到任何消息,抛出Queue.Empty异常
    2. 若block值为False,消息队列如果为空,则会理科抛出“Queue.Empty”异常
      1. Queue.get_nowait():相当Queue.get(False);
      2. Queue.put(item,[block[, timeout]]):将item消息写入队列,block默认值为True;

实例

from multiprocessing import Process,Queue
import os,time,random
def write(q):
    for value in ['A','B','C']:
        print('Put %s to queue ... '%value)
        q.put(value)
        time.sleep(random.random())
def read(q):
    while True:
        if not q.empty():
            value = q.get(True)
            print('Get %s from queue.' %value)
            time.sleep(random.random())
        else:
            break
if __name__=='__main__':
    q = Queue()
    pw = Process(target=write,args=(q,))
    pr = Process(target=read,args=(q,))
    pw.start()
    pw.join()
    pr.join()
    pr.join()
    print('')
    print('所有数据都写入并且已经读完')

进程池

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 进程间通信——队列和管道(multiprocess.Queue、multiprocess.Pipe) 进程间通信 ...
    go以恒阅读 5,750评论 0 3
  • 进程、进程的使用、进程注意点、进程间通信-Queue、进程池Pool、进程与线程对比、文件夹拷贝器-多任务 1.进...
    Cestine阅读 4,676评论 0 0
  • 一、总体内容 1.1、进程、程序的概念 1.2、使用 Process 完成多进程- multiprocessing...
    IIronMan阅读 4,170评论 0 1
  • 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概...
    SlashBoyMr_wang阅读 4,954评论 0 3
  • 什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单...
    可笑的黑耀斑阅读 4,671评论 0 0

友情链接更多精彩内容