麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

詳解python分布式進程

2020-02-15 23:06:59
字體:
來源:轉載
供稿:網友

在Thread和Process中,應當優(yōu)選Process,因為Process更穩(wěn)定,而且,Process可以分布到多臺機器上,而Thread最多只能分布到同一臺機器的多個CPU上。

Python的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多臺機器上。一個服務進程可以作為調度者,將任務分布到其他多個進程中,依靠網絡通信。由于managers模塊封裝很好,不必了解網絡通信的細節(jié),就可以很容易地編寫分布式多進程程序。

舉個例子:如果我們已經有一個通過Queue通信的多進程程序在同一臺機器上運行,現(xiàn)在,由于處理任務的進程任務繁重,希望把發(fā)送任務的進程和處理任務的進程分布到兩臺機器上。怎么用分布式進程實現(xiàn)?

原有的Queue可以繼續(xù)使用,但是,通過managers模塊把Queue通過網絡暴露出去,就可以讓其他機器的進程訪問Queue了。

我們先看服務進程,服務進程負責啟動Queue,把Queue注冊到網絡上,然后往Queue里面寫入任務:

# task_master.py import random, time, queuefrom multiprocessing.managers import BaseManager# 發(fā)送任務的隊列:task_queue = queue.Queue()# 接收結果的隊列:result_queue = queue.Queue()# 從BaseManager繼承的QueueManager:class QueueManager(BaseManager):  pass# 把兩個Queue都注冊到網絡上, callable參數(shù)關聯(lián)了Queue對象:QueueManager.register('get_task_queue', callable=lambda: task_queue)QueueManager.register('get_result_queue', callable=lambda: result_queue)# 綁定端口5000, 設置驗證碼'abc':manager = QueueManager(address=('', 5000), authkey=b'abc')# 啟動Queue:manager.start()# 獲得通過網絡訪問的Queue對象:task = manager.get_task_queue()result = manager.get_result_queue()# 放幾個任務進去:for i in range(10):  n = random.randint(0, 10000)  print('Put task %d...' % n)  task.put(n)# 從result隊列讀取結果:print('Try get results...')for i in range(10):  r = result.get(timeout=10)  print('Result: %s' % r)# 關閉:manager.shutdown()

請注意,當我們在一臺機器上寫多進程程序時,創(chuàng)建的Queue可以直接拿來用,但是,在分布式多進程環(huán)境下,添加任務到Queue不可以直接對原始的task_queue進行操作,那樣就繞過了QueueManager的封裝,必須通過manager.get_task_queue()獲得的Queue接口添加。

然后,在另一臺機器上啟動任務進程(本機上啟動也可以):

# task_master.pyimport random, time, queuefrom multiprocessing.managers import BaseManager# 發(fā)送任務的隊列:task_queue = queue.Queue()# 接收結果的隊列:result_queue = queue.Queue()# 從BaseManager繼承的QueueManager:class QueueManager(BaseManager):  pass# 把兩個Queue都注冊到網絡上, callable參數(shù)關聯(lián)了Queue對象:QueueManager.register('get_task_queue', callable=lambda: task_queue)QueueManager.register('get_result_queue', callable=lambda: result_queue)# 綁定端口5000, 設置驗證碼'abc':manager = QueueManager(address=('', 5000), authkey=b'abc')# 啟動Queue:manager.start()# 獲得通過網絡訪問的Queue對象:task = manager.get_task_queue()result = manager.get_result_queue()# 放幾個任務進去:for i in range(10):  n = random.randint(0, 10000)  print('Put task %d...' % n)  task.put(n)# 從result隊列讀取結果:print('Try get results...')for i in range(10):  r = result.get(timeout=10)  print('Result: %s' % r)# 關閉:manager.shutdown()            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美亚洲一级 | 国产91片 | 婷婷久久青草热一区二区 | 91嫩草丨国产丨精品入口 | 精品国产91久久久久 | 亚洲一区二区中文字幕在线观看 | 性生活视频软件 | 亚洲91精品 | 亚洲婷婷日日综合婷婷噜噜噜 | 97香蕉超级碰碰久久免费软件 | 国产免费最爽的乱淫视频a 毛片国产 | 免费男女视频 | 人人舔人人插 | 久久久久久久久久久久久久av | 国产宾馆3p国语对白 | 性欧美日本 | 久久久久久久免费视频 | 国产精品久久久久久模特 | 欧美91看片特黄aaaa | 12av毛片 | 13一14毛片免费看 | 91福利国产在线观一区二区 | 羞羞网站入口 | 欧美精品18 | 久久国产精品91 | 毛片视频网站在线观看 | 欧美综合成人 | 看毛片电影 | 精品国产91久久久久久久妲己 | 少妇色诱麻豆色哟哟 | 精品成人av一区二区三区 | 成人午夜毛片 | 爱唯侦察 国产合集 亚洲 | 免费久久精品 | 欧美老逼 | 懂色av懂色aⅴ精彩av | 欧美久久久一区二区三区 | 成人免费av在线播放 | 欧美性受xxxxxx黑人xyx性爽 | 嗯~啊~弄嗯~啊h高潮视频 | 日本特级a一片免费观看 |