最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用multiprocessing實現(xiàn)一個最簡單的分布式作業(yè)調度系統(tǒng)

 更新時間:2016年03月14日 10:02:25   作者:kongxx  
mutilprocess像線程一樣管理進程,這個是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多,通過本文給大家介紹Python使用multiprocessing實現(xiàn)一個最簡單的分布式作業(yè)調度系統(tǒng),需要的朋友參考下

 mutilprocess像線程一樣管理進程,這個是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多。

介紹

Python的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多臺機器上。一個服務進程可以作為調度者,將任務分布到其他多個機器的多個進程中,依靠網(wǎng)絡通信。

想到這,就在想是不是可以使用此模塊來實現(xiàn)一個簡單的作業(yè)調度系統(tǒng)。

實現(xiàn)

Job

首先創(chuàng)建一個Job類,為了測試簡單,只包含一個job id屬性

job.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Job:
def __init__(self, job_id):
self.job_id = job_id

Master

Master用來派發(fā)作業(yè)和顯示運行完成的作業(yè)信息

master.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Queue import Queue
from multiprocessing.managers import BaseManager
from job import Job

class Master:

def __init__(self):
# 派發(fā)出去的作業(yè)隊列
self.dispatched_job_queue = Queue()
# 完成的作業(yè)隊列
self.finished_job_queue = Queue()
def get_dispatched_job_queue(self):
return self.dispatched_job_queue
def get_finished_job_queue(self):
return self.finished_job_queue
def start(self):
# 把派發(fā)作業(yè)隊列和完成作業(yè)隊列注冊到網(wǎng)絡上
BaseManager.register('get_dispatched_job_queue', callable=self.get_dispatched_job_queue)
BaseManager.register('get_finished_job_queue', callable=self.get_finished_job_queue)
# 監(jiān)聽端口和啟動服務
manager = BaseManager(address=('0.0.0.0', 8888), authkey='jobs')
manager.start()
# 使用上面注冊的方法獲取隊列
dispatched_jobs = manager.get_dispatched_job_queue()
finished_jobs = manager.get_finished_job_queue()
# 這里一次派發(fā)10個作業(yè),等到10個作業(yè)都運行完后,繼續(xù)再派發(fā)10個作業(yè)
job_id = 0
while True:
for i in range(0, 10):
job_id = job_id + 1
job = Job(job_id)
print('Dispatch job: %s' % job.job_id)
dispatched_jobs.put(job)
while not dispatched_jobs.empty():
job = finished_jobs.get(60)
print('Finished Job: %s' % job.job_id)
manager.shutdown()
if __name__ == "__main__":
master = Master()
master.start()

Slave

Slave用來運行master派發(fā)的作業(yè)并將結果返回

slave.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
from Queue import Queue
from multiprocessing.managers import BaseManager
from job import Job

class Slave:

def __init__(self):
# 派發(fā)出去的作業(yè)隊列
self.dispatched_job_queue = Queue()
# 完成的作業(yè)隊列
self.finished_job_queue = Queue()

def start(self):

# 把派發(fā)作業(yè)隊列和完成作業(yè)隊列注冊到網(wǎng)絡上
BaseManager.register('get_dispatched_job_queue')
BaseManager.register('get_finished_job_queue')
# 連接master
server = '127.0.0.1'
print('Connect to server %s...' % server)
manager = BaseManager(address=(server, 8888), authkey='jobs')
manager.connect()
# 使用上面注冊的方法獲取隊列
dispatched_jobs = manager.get_dispatched_job_queue()
finished_jobs = manager.get_finished_job_queue()
# 運行作業(yè)并返回結果,這里只是模擬作業(yè)運行,所以返回的是接收到的作業(yè)
while True:
job = dispatched_jobs.get(timeout=1)
print('Run job: %s ' % job.job_id)
time.sleep(1)
finished_jobs.put(job)
if __name__ == "__main__":
slave = Slave()
slave.start()

測試

分別打開三個linux終端,第一個終端運行master,第二個和第三個終端用了運行slave,運行結果如下

master

$ python master.py 
Dispatch job: 1
Dispatch job: 2
Dispatch job: 3
Dispatch job: 4
Dispatch job: 5
Dispatch job: 6
Dispatch job: 7
Dispatch job: 8
Dispatch job: 9
Dispatch job: 10
Finished Job: 1
Finished Job: 2
Finished Job: 3
Finished Job: 4
Finished Job: 5
Finished Job: 6
Finished Job: 7
Finished Job: 8
Finished Job: 9
Dispatch job: 11
Dispatch job: 12
Dispatch job: 13
Dispatch job: 14
Dispatch job: 15
Dispatch job: 16
Dispatch job: 17
Dispatch job: 18
Dispatch job: 19
Dispatch job: 20
Finished Job: 10
Finished Job: 11
Finished Job: 12
Finished Job: 13
Finished Job: 14
Finished Job: 15
Finished Job: 16
Finished Job: 17
Finished Job: 18
Dispatch job: 21
Dispatch job: 22
Dispatch job: 23
Dispatch job: 24
Dispatch job: 25
Dispatch job: 26
Dispatch job: 27
Dispatch job: 28
Dispatch job: 29
Dispatch job: 30

slave1

$ python slave.py 
Connect to server 127.0.0.1...
Run job: 1 
Run job: 2 
Run job: 3 
Run job: 5 
Run job: 7 
Run job: 9 
Run job: 11 
Run job: 13 
Run job: 15 
Run job: 17 
Run job: 19 
Run job: 21 
Run job: 23 

slave2

$ python slave.py 
Connect to server 127.0.0.1...
Run job: 4 
Run job: 6 
Run job: 8 
Run job: 10 
Run job: 12 
Run job: 14 
Run job: 16 
Run job: 18 
Run job: 20 
Run job: 22 
Run job: 24 

以上內容是小編給大家介紹的Python使用multiprocessing實現(xiàn)一個最簡單的分布式作業(yè)調度系統(tǒng),希望對大家有所幫助!

相關文章

  • 對python中Librosa的mfcc步驟詳解

    對python中Librosa的mfcc步驟詳解

    今天小編就為大家分享一篇對python中Librosa的mfcc步驟詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 基于Python編寫一個語音合成系統(tǒng)

    基于Python編寫一個語音合成系統(tǒng)

    這篇文章主要介紹了如何利用Python制作一個語音合成系統(tǒng),文中的示例代碼講解詳細,對我們學習Python有一定的幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • win7上tensorflow2.2.0安裝成功 引用DLL load failed時找不到指定模塊 tensorflow has no attribute xxx 解決方法

    win7上tensorflow2.2.0安裝成功 引用DLL load failed時找不到指定模塊 tensorflo

    這篇文章主要介紹了win7上tensorflow2.2.0安裝成功 引用時DLL load failed找不到指定模塊 tensorflow has no attribute xxx 解決方法,需要的朋友可以參考下
    2020-05-05
  • python中id函數(shù)運行方式

    python中id函數(shù)運行方式

    在本篇文章里小編給大家分享了關于python中id函數(shù)運行方式及相關實例,需要的朋友們可以參考下。
    2020-07-07
  • Django Admin后臺模型列表頁面如何添加自定義操作按鈕

    Django Admin后臺模型列表頁面如何添加自定義操作按鈕

    這篇文章主要介紹了Django Admin后臺模型列表頁面如何添加自定義操作按鈕,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • python如何生成各種隨機分布圖

    python如何生成各種隨機分布圖

    這篇文章主要為大家詳細介紹了python如何生成各種隨機分布圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python調用matlab的方法詳解

    python調用matlab的方法詳解

    這篇文章主要為大家介紹了python調用matlab,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • pytorch中的squeeze函數(shù)、cat函數(shù)使用

    pytorch中的squeeze函數(shù)、cat函數(shù)使用

    這篇文章主要介紹了pytorch中的squeeze函數(shù)、cat函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python中的格式化輸出用法總結

    python中的格式化輸出用法總結

    這篇文章主要介紹了python中的格式化輸出用法,分析了Python格式化輸出的種類并結合實例形式總結了針對浮點數(shù)的格式化輸出方法,需要的朋友可以參考下
    2016-07-07
  • Matlab實現(xiàn)圖像邊緣檢測

    Matlab實現(xiàn)圖像邊緣檢測

    這篇文章主要為大家詳細介紹了Matlab實現(xiàn)圖像邊緣檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

本溪市| 武陟县| 台中市| 扎兰屯市| 柳江县| 曲松县| 平顺县| 砀山县| 靖西县| 天等县| 赫章县| 山东省| 明水县| 松阳县| 察隅县| 桂林市| 庄河市| 德安县| 惠东县| 新安县| 嘉峪关市| 莫力| 夏津县| 和龙市| 富平县| 临漳县| 开封市| 虹口区| 象州县| 饶平县| 安岳县| 陇南市| 逊克县| 大渡口区| 时尚| 阳西县| 大同县| 洪雅县| 乌苏市| 海南省| 通河县|