国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python多進程通信Queue、Pipe、Value、Array實例

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

2020-05-14 09:36腳本之家 Python

這篇文章主要介紹了Python多進程通信Queue、Pipe、Value、Array實例,queue和pipe用來在進程間傳遞消息、Value + Array 是python中共享內存映射文件的方法,需要的朋友可以參考下

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處理完畢。

運行結果:

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

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]

 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91视频精品| 亚洲www啪成人一区二区 | 国产黄色免费看 | 久久久婷婷 | 日本不卡一区二区三区在线观看 | 人人爽人人爽人人片av | 亚洲视频免费观看 | 久久国产精品视频 | 日韩亚洲| 91精品视频网 | 午夜欧美一区二区三区在线播放 | 天堂一区二区三区在线 | 欧美日韩久久精品 | 中文字幕一区在线 | 99re国产 | 国产精品视频成人 | 国产一区 | 国产在线精品一区二区三区 | 亚洲美女精品视频 | 久久中文字幕一区二区 | 国产精品日韩 | 欧美专区在线 | 欧美一级在线视频 | 国产在线观看一区二区三区 | 91综合国产 | av动漫一区二区 | 国产成人精品一区二 | 亚洲国产成人av | 日韩欧美精品 | 日韩一区二区三区在线观看 | 久久亚洲综合 | 日韩成人精品 | 欧美精品久久久久久久久老牛影院 | 国产精品一区二区不卡 | 日韩在线视频免费观看 | 男人的天堂在线视频 | 一区二区高清 | 久久久亚洲精品一区二区三区 | 成人久久精品 | 日韩成人精品 | 在线视频一区二区三区 |