<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
        主站蜘蛛池模板: 午夜免费福利在线| 免费无码又爽又刺激高潮软件| 一级毛片免费观看不卡的| 久久亚洲av无码精品浪潮| 丁香六月婷婷精品免费观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲国产精品嫩草影院在线观看 | 国产一卡二卡3卡四卡免费| 无码欧精品亚洲日韩一区| 久久久久成人精品免费播放动漫| 亚洲av无码成h人动漫无遮挡| 秋霞人成在线观看免费视频| 中文字幕亚洲综合久久2| 性短视频在线观看免费不卡流畅| 亚洲午夜电影在线观看高清| AA免费观看的1000部电影| 亚洲欧美日韩中文字幕在线一区| 国产美女无遮挡免费网站| 免费看一级高潮毛片| 亚洲熟女乱综合一区二区| 中文在线免费观看| 亚洲伊人tv综合网色| 无码精品A∨在线观看免费| 亚洲人成电影网站色| 亚洲精品国产自在久久| 999zyz**站免费毛片| 亚洲国产成人资源在线软件| 在线看片人成视频免费无遮挡| 一级美国片免费看| 久久久久亚洲精品日久生情| 成人免费视频一区二区三区| 黄色三级三级免费看| 日韩亚洲AV无码一区二区不卡 | 在线天堂免费观看.WWW | 久久99精品免费一区二区| 综合自拍亚洲综合图不卡区| 国产又黄又爽又刺激的免费网址| 西西人体免费视频| 亚洲色图激情文学| 亚洲国产精品无码久久一线 | 亚洲国产成人精品久久久国产成人一区二区三区综 |