8.進(jìn)程間通信與進(jìn)程池

進(jìn)程間通信與進(jìn)程池

進(jìn)程間通信-Queue

通常利用multiprocessing模塊的Queue實(shí)現(xiàn)多線程之間的數(shù)據(jù)傳遞,Queue本身是一個(gè)消息列隊(duì)程序

  1. q=Queue()#若括號(hào)中沒有指定最大可接受的消息數(shù)量或數(shù)量為負(fù)值,那么代表可接受的消息數(shù)量沒有上限直到內(nèi)存耗盡
  2. Queue.qsize():返回當(dāng)前隊(duì)列包含的消息數(shù)量
  3. Queue.empty():隊(duì)列為空返回True
  4. Queue.full():隊(duì)列為滿返回True
  5. Queue.get([block[,timeout]]):獲取隊(duì)列中的一條消息,然后將其從隊(duì)列中移除,block默認(rèn)值為True
    1. 若block使用默認(rèn)值,且沒有設(shè)置timeout(單位秒),消息隊(duì)列如果為空,此時(shí)程序?qū)⒈蛔枞ㄍT谧x取狀態(tài)),直到從消息隊(duì)列讀到消息為止,如果設(shè)置了timeout,則會(huì)等待timeout秒。若還沒有讀到任何消息,拋出Queue.Empty異常
    2. 若block值為False,消息隊(duì)列如果為空,則會(huì)理科拋出“Queue.Empty”異常
      1. Queue.get_nowait():相當(dāng)Queue.get(False);
      2. Queue.put(item,[block[, timeout]]):將item消息寫入隊(duì)列,block默認(rèn)值為True;

實(shí)例

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('所有數(shù)據(jù)都寫入并且已經(jīng)讀完')

進(jìn)程池

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 進(jìn)程間通信——隊(duì)列和管道(multiprocess.Queue、multiprocess.Pipe) 進(jìn)程間通信 ...
    go以恒閱讀 1,843評(píng)論 0 3
  • 進(jìn)程、進(jìn)程的使用、進(jìn)程注意點(diǎn)、進(jìn)程間通信-Queue、進(jìn)程池Pool、進(jìn)程與線程對(duì)比、文件夾拷貝器-多任務(wù) 1.進(jìn)...
    Cestine閱讀 1,105評(píng)論 0 0
  • 一、總體內(nèi)容 1.1、進(jìn)程、程序的概念 1.2、使用 Process 完成多進(jìn)程- multiprocessing...
    IIronMan閱讀 838評(píng)論 0 1
  • 顧名思義,進(jìn)程即正在執(zhí)行的一個(gè)過程。進(jìn)程是對(duì)正在運(yùn)行程序的一個(gè)抽象。進(jìn)程的概念起源于操作系統(tǒng),是操作系統(tǒng)最核心的概...
    SlashBoyMr_wang閱讀 1,289評(píng)論 0 3
  • 什么是進(jìn)程 進(jìn)程(Process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單...
    可笑的黑耀斑閱讀 1,101評(píng)論 0 0

友情鏈接更多精彩內(nèi)容