• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    Python多進(jìn)程通信Queue、Pipe、Value、Array實(shí)例

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:31:30
    文檔

    Python多進(jìn)程通信Queue、Pipe、Value、Array實(shí)例

    Python多進(jìn)程通信Queue、Pipe、Value、Array實(shí)例:queue和pipe的區(qū)別: pipe用來(lái)在兩個(gè)進(jìn)程間通信。queue用來(lái)在多個(gè)進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語(yǔ)言都支持此兩種方法。 1)Queue & JoinableQueue queue用來(lái)在進(jìn)程間傳遞消息,任何可以pickle-able的對(duì)
    推薦度:
    導(dǎo)讀Python多進(jìn)程通信Queue、Pipe、Value、Array實(shí)例:queue和pipe的區(qū)別: pipe用來(lái)在兩個(gè)進(jìn)程間通信。queue用來(lái)在多個(gè)進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語(yǔ)言都支持此兩種方法。 1)Queue & JoinableQueue queue用來(lái)在進(jìn)程間傳遞消息,任何可以pickle-able的對(duì)
    queue和pipe的區(qū)別: pipe用來(lái)在兩個(gè)進(jìn)程間通信。queue用來(lái)在多個(gè)進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語(yǔ)言都支持此兩種方法。

    1)Queue & JoinableQueue

    queue用來(lái)在進(jìn)程間傳遞消息,任何可以pickle-able的對(duì)象都可以在加入到queue。

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

    task_done()用來(lái)告訴queue一個(gè)task完成。一般地在調(diào)用get()獲得一個(gè)task,在task結(jié)束后調(diào)用task_done()來(lái)通知Queue當(dāng)前task完成。

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

    代碼:

    代碼如下:


    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來(lái)表示task處理完畢。

    運(yùn)行結(jié)果:

    2)pipe

    pipe()返回一對(duì)連接對(duì)象,代表了pipe的兩端。每個(gè)對(duì)象都有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中共享內(nèi)存 映射文件的方法,速度比較快。

    代碼如下:


    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]

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Python多進(jìn)程通信Queue、Pipe、Value、Array實(shí)例

    Python多進(jìn)程通信Queue、Pipe、Value、Array實(shí)例:queue和pipe的區(qū)別: pipe用來(lái)在兩個(gè)進(jìn)程間通信。queue用來(lái)在多個(gè)進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語(yǔ)言都支持此兩種方法。 1)Queue & JoinableQueue queue用來(lái)在進(jìn)程間傳遞消息,任何可以pickle-able的對(duì)
    推薦度:
    標(biāo)簽: 通信 python value
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專題
    Top
    主站蜘蛛池模板: 久久99精品久久久久久秒播| 久久久久一级精品亚洲国产成人综合AV区| 久久久精品午夜免费不卡| 人妻一区二区三区无码精品一区| 精品国产麻豆免费人成网站| 亚洲色精品vr一区二区三区| 国产午夜精品久久久久九九电影| 99re6在线视频精品免费| 亚洲欧美日韩国产一区二区三区精品 | 国产精品视频a播放| 一本一道久久a久久精品综合| 国产精品成人观看视频网站| 国产日韩精品在线| 国产亚洲精品精华液| 在线精品动漫一区二区无广告| 精品国产国产综合精品| 亚洲精品线在线观看| 国产精品福利在线播放| 久久久久久国产精品免费无码| 亚洲国产精品日韩专区AV| 精品欧美一区二区三区久久久| 99久久精品这里只有精品| 黑人精品videos亚洲人| 99久久久精品| 国产精品日本一区二区不卡视频| 亚洲精品乱码久久久久久中文字幕| 欧美精品在线免费| 精品国产污污免费网站入口在线 | 最新精品露脸国产在线| 国产日韩高清三级精品人成| 国产A√精品区二区三区四区| 秋霞午夜鲁丝片午夜精品久| 国内精品91最新在线观看| 99精品视频在线观看| 99re6在线精品免费观看| 国产成人精品一区二区秒拍| 国产精品人成在线播放新网站| 99在线精品一区二区三区| 国产精品免费无遮挡无码永久视频 | 久久久99精品成人片中文字幕| 国产精品福利片免费看|