最近一直跟著廖大在學(xué)Python,關(guān)于分布式進(jìn)程的小例子挺有趣的,這里做個(gè)記錄。
分布式進(jìn)程
Python的multiprocessing模塊不但支持多進(jìn)程,其中managers子模塊還支持把多進(jìn)程分布到多臺(tái)機(jī)器上。一個(gè)服務(wù)進(jìn)程可以作為調(diào)度者,將任務(wù)分布到其他多個(gè)進(jìn)程中,依靠網(wǎng)絡(luò)通信。由于managers模塊封裝很好,不必了解網(wǎng)絡(luò)通信的細(xì)節(jié),就可以很容易地編寫分布式多進(jìn)程程序。
master服務(wù)端原理:通過(guò)managers模塊把Queue通過(guò)網(wǎng)絡(luò)暴露出去,其他機(jī)器的進(jìn)程就可以訪問(wèn)Queue了
服務(wù)進(jìn)程負(fù)責(zé)啟動(dòng)Queue,把Queue注冊(cè)到網(wǎng)絡(luò)上,然后往Queue里面寫入任務(wù),代碼如下:
#task_master.py #coding=utf-8 #多進(jìn)程分布式例子 #服務(wù)器端 from multiprocessing.managers import BaseManager from multiprocessing import freeze_support #server啟動(dòng)報(bào)錯(cuò),提示需要引用此包 import random,time,queue #發(fā)送任務(wù)的隊(duì)列 task_queue = queue.Queue() #接收結(jié)果的隊(duì)列 result_queue = queue.Queue() #從BaseManager繼承的QueueManager class QueueManager(BaseManager): pass #win7 64 貌似不支持callable下調(diào)用匿名函數(shù)lambda,這里封裝一下 def return_task_queue(): global task_queue return task_queue def return_result_queue(): global result_queue return result_queue def test(): #把兩個(gè)Queue注冊(cè)到網(wǎng)絡(luò)上,callable參數(shù)關(guān)聯(lián)了Queue對(duì)象 #QueueManager.register('get_task_queue',callable=lambda:task_queue) #QueueManager.register('get_result_queue',callable=lambda:result_queue) QueueManager.register('get_task_queue',callable=return_task_queue) QueueManager.register('get_result_queue',callable=return_result_queue) #綁定端口5000,設(shè)置驗(yàn)證碼‘a(chǎn)bc' manager = QueueManager(address=('127.0.0.1',5000),authkey=b'abc')#這里必須加上本地默認(rèn)ip地址127.0.0.1 #啟動(dòng)Queue manager.start() #server = manager.get_server() #server.serve_forever() print('start server master') #獲得通過(guò)網(wǎng)絡(luò)訪問(wèn)的Queue對(duì)象 task = manager.get_task_queue() result = manager.get_result_queue() #放幾個(gè)任務(wù)進(jìn)去 for i in range(10): n = random.randint(0,10000) print('put task %d...' % n) task.put(n) #從result隊(duì)列讀取結(jié)果 print('try get results...') for i in range(10): r = result.get(timeout=10) print('result:%s' % r) #關(guān)閉 manager.shutdown() print('master exit') if __name__ == '__main__': freeze_support() test()
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)題目:python3學(xué)習(xí)筆記之多進(jìn)程分布式小例子-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://chinadenli.net/article20/ddehco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站收錄、移動(dòng)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、網(wǎng)站導(dǎo)航、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容