<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python多進程通信Queue、Pipe、Value、Array實例

        來源:懂視網 責編:小采 時間:2020-11-27 14:31:30
        文檔

        Python多進程通信Queue、Pipe、Value、Array實例

        Python多進程通信Queue、Pipe、Value、Array實例:queue和pipe的區別: pipe用來在兩個進程間通信。queue用來在多個進程間實現通信。 此兩種方法為所有系統多進程通信的基本方法,幾乎所有的語言都支持此兩種方法。 1)Queue & JoinableQueue queue用來在進程間傳遞消息,任何可以pickle-able的對
        推薦度:
        導讀Python多進程通信Queue、Pipe、Value、Array實例:queue和pipe的區別: pipe用來在兩個進程間通信。queue用來在多個進程間實現通信。 此兩種方法為所有系統多進程通信的基本方法,幾乎所有的語言都支持此兩種方法。 1)Queue & JoinableQueue queue用來在進程間傳遞消息,任何可以pickle-able的對
        queue和pipe的區別: pipe用來在兩個進程間通信。queue用來在多個進程間實現通信。 此兩種方法為所有系統多進程通信的基本方法,幾乎所有的語言都支持此兩種方法。

        1)Queue & JoinableQueue

        queue用來在進程間傳遞消息,任何可以pickle-able的對象都可以在加入到queue。

        multiprocessing.JoinableQueue 是 Queue的子類,增加了task_done()和join()方法。

        task_done()用來告訴queue一個task完成。一般地在調用get()獲得一個task,在task結束后調用task_done()來通知Queue當前task完成。

        join() 阻塞直到queue中的所有的task都被處理(即task_done方法被調用)。

        代碼:

        代碼如下:


        import multiprocessing
        import time

        class Consumer(multiprocessing.Process):

        def __init__(self, task_queue, result_queue):
        multiprocessing.Process.__init__(self)
        self.task_queue = task_queue
        self.result_queue = result_queue

        def run(self):
        proc_name = self.name
        while True:
        next_task = self.task_queue.get()
        if next_task is None:
        # Poison pill means shutdown
        print ('%s: Exiting' % proc_name)
        self.task_queue.task_done()
        break
        print ('%s: %s' % (proc_name, next_task))
        answer = next_task() # __call__()
        self.task_queue.task_done()
        self.result_queue.put(answer)
        return


        class Task(object):
        def __init__(self, a, b):
        self.a = a
        self.b = b
        def __call__(self):
        time.sleep(0.1) # pretend to take some time to do the work
        return '%s * %s = %s' % (self.a, self.b, self.a * self.b)
        def __str__(self):
        return '%s * %s' % (self.a, self.b)


        if __name__ == '__main__':
        # Establish communication queues
        tasks = multiprocessing.JoinableQueue()
        results = multiprocessing.Queue()

        # Start consumers
        num_consumers = multiprocessing.cpu_count()
        print ('Creating %d consumers' % num_consumers)
        consumers = [ Consumer(tasks, results)
        for i in range(num_consumers) ]
        for w in consumers:
        w.start()

        # Enqueue jobs
        num_jobs = 10
        for i in range(num_jobs):
        tasks.put(Task(i, i))

        # Add a poison pill for each consumer
        for i in range(num_consumers):
        tasks.put(None)

        # Wait for all of the tasks to finish
        tasks.join()

        # Start printing results
        while num_jobs:
        result = results.get()
        print ('Result:', result)
        num_jobs -= 1

        注意小技巧: 使用None來表示task處理完畢。

        運行結果:

        2)pipe

        pipe()返回一對連接對象,代表了pipe的兩端。每個對象都有send()和recv()方法。

        代碼:
        代碼如下:


        from multiprocessing import Process, Pipe

        def f(conn):
        conn.send([42, None, 'hello'])
        conn.close()

        if __name__ == '__main__':
        parent_conn, child_conn = Pipe()
        p = Process(target=f, args=(child_conn,))
        p.start()
        p.join()
        print(parent_conn.recv()) # prints "[42, None, 'hello']"

        3)Value + Array

        Value + Array 是python中共享內存 映射文件的方法,速度比較快。

        代碼如下:


        from multiprocessing import Process, Value, Array

        def f(n, a):
        n.value = n.value + 1
        for i in range(len(a)):
        a[i] = a[i] * 10

        if __name__ == '__main__':
        num = Value('i', 1)
        arr = Array('i', range(10))

        p = Process(target=f, args=(num, arr))
        p.start()
        p.join()

        print(num.value)
        print(arr[:])

        p2 = Process(target=f, args=(num, arr))
        p2.start()
        p2.join()

        print(num.value)
        print(arr[:])

        # the output is :
        # 2
        # [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
        # 3
        # [0, 100, 200, 300, 400, 500, 600, 700, 800, 900]

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python多進程通信Queue、Pipe、Value、Array實例

        Python多進程通信Queue、Pipe、Value、Array實例:queue和pipe的區別: pipe用來在兩個進程間通信。queue用來在多個進程間實現通信。 此兩種方法為所有系統多進程通信的基本方法,幾乎所有的語言都支持此兩種方法。 1)Queue & JoinableQueue queue用來在進程間傳遞消息,任何可以pickle-able的對
        推薦度:
        標簽: 通信 python value
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 蜜臀91精品国产免费观看| 91精品免费久久久久久久久| 日韩免费观看一级毛片看看| 亚洲熟伦熟女专区hd高清| 中文字幕亚洲一区二区三区| 在线精品自拍亚洲第一区| 国产成人免费片在线观看| 色婷婷亚洲一区二区三区| 国产免费人成在线视频| 免费看一级一级人妻片 | av免费不卡国产观看| 亚洲永久中文字幕在线| 无人在线直播免费观看| 国内精品久久久久影院亚洲| 免费一区二区视频| 91亚洲自偷手机在线观看| 亚洲高清免费在线观看| 中国亚洲呦女专区| www.亚洲精品.com| 亚洲精品一二三区| 亚洲国产aⅴ综合网| 91在线视频免费观看| 亚洲高清无在码在线电影不卡| 无人在线观看完整免费版视频 | 亚洲天堂中文字幕在线观看| 日韩欧美一区二区三区免费观看| 看亚洲a级一级毛片| 亚洲国产精品高清久久久| 91久久成人免费| MM1313亚洲国产精品| 自拍偷自拍亚洲精品第1页| 91福利视频免费观看| 亚洲av无码一区二区三区在线播放 | 激情内射亚洲一区二区三区| 特黄aa级毛片免费视频播放| 国产偷v国产偷v亚洲高清| a毛片基地免费全部视频| 色多多A级毛片免费看| 亚洲欧洲国产日韩精品| 国产免费怕怕免费视频观看| a级成人免费毛片完整版|