国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答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
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網(wǎng) 責(zé)編:小采 時間: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用來在兩個進(jìn)程間通信。queue用來在多個進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語言都支持此兩種方法。 1)Queue & JoinableQueue queue用來在進(jìn)程間傳遞消息,任何可以pickle-able的對
推薦度:
導(dǎo)讀Python多進(jìn)程通信Queue、Pipe、Value、Array實(shí)例:queue和pipe的區(qū)別: pipe用來在兩個進(jìn)程間通信。queue用來在多個進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語言都支持此兩種方法。 1)Queue & JoinableQueue queue用來在進(jìn)程間傳遞消息,任何可以pickle-able的對
queue和pipe的區(qū)別: pipe用來在兩個進(jìn)程間通信。queue用來在多個進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語言都支持此兩種方法。

1)Queue & JoinableQueue

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

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

task_done()用來告訴queue一個task完成。一般地在調(diào)用get()獲得一個task,在task結(jié)束后調(diào)用task_done()來通知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來表示task處理完畢。

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

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中共享內(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)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。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用來在兩個進(jìn)程間通信。queue用來在多個進(jìn)程間實(shí)現(xiàn)通信。 此兩種方法為所有系統(tǒng)多進(jìn)程通信的基本方法,幾乎所有的語言都支持此兩種方法。 1)Queue & JoinableQueue queue用來在進(jìn)程間傳遞消息,任何可以pickle-able的對
推薦度:
標(biāo)簽: 通信 python value
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国内精品视频在线播放 | 国产亚洲免费观看 | 国产精品久久久久久久9999 | 亚洲一区二区三区免费 | 国产成人精品三区 | 成人毛片国产a | 日本不卡一二三区 | 香蕉视频在线免费看 | 老司机精品视频一区二区 | 亚洲精品乱码久久久久久 | 91久久国产综合精品女同国语 | 99久久免费国产精精品 | 制服丝袜先锋影音 | 亚州一级 | 国产欧美亚洲精品a | 日韩资源| 久久亚洲欧美综合激情一区 | 亚洲欧美h | 欧美一区二区三区视频在线观看 | 久久国产精品自由自在 | 中文字幕欧美在线观看 | 日韩精品欧美亚洲高清有无 | 欧美日韩三级在线观看 | 国产亚洲综合成人91精品 | 中文字幕va一区二区三区 | 欧美第5页 | 亚洲欧美中文日韩在线v日本 | 亚欧免费视频一区二区三区 | 国产精彩视频 | 综合视频在线 | 久久99久久精品国产99热 | 一区二区三区美女 | 日韩免费在线 | 国产精品特级毛片一区二区三区 | 久久精品亚洲一区二区三区浴池 | 精品二区 | 亚洲欧美a| 国产一级一片免费播放视频 | 精品在线免费播放 | 成人免费一级毛片在线播放视频 | 欧美精品一区二区三区视频 |