<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python使用multiprocessing實現一個最簡單的分布式作業調度系統

        來源:懂視網 責編:小采 時間:2020-11-27 14:35:25
        文檔

        Python使用multiprocessing實現一個最簡單的分布式作業調度系統

        Python使用multiprocessing實現一個最簡單的分布式作業調度系統:mutilprocess像線程一樣管理進程,這個是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多。 介紹 Python的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多臺機器上。一個服務進程可
        推薦度:
        導讀Python使用multiprocessing實現一個最簡單的分布式作業調度系統:mutilprocess像線程一樣管理進程,這個是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多。 介紹 Python的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多臺機器上。一個服務進程可

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

        介紹

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

        想到這,就在想是不是可以使用此模塊來實現一個簡單的作業調度系統。

        實現

        Job

        首先創建一個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用來派發作業和顯示運行完成的作業信息

        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):
        # 派發出去的作業隊列
        self.dispatched_job_queue = Queue()
        # 完成的作業隊列
        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):
        # 把派發作業隊列和完成作業隊列注冊到網絡上
        BaseManager.register('get_dispatched_job_queue', callable=self.get_dispatched_job_queue)
        BaseManager.register('get_finished_job_queue', callable=self.get_finished_job_queue)
        # 監聽端口和啟動服務
        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()
        # 這里一次派發10個作業,等到10個作業都運行完后,繼續再派發10個作業
        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派發的作業并將結果返回

        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):
        # 派發出去的作業隊列
        self.dispatched_job_queue = Queue()
        # 完成的作業隊列
        self.finished_job_queue = Queue()

        def start(self):

        # 把派發作業隊列和完成作業隊列注冊到網絡上
        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()
        # 運行作業并返回結果,這里只是模擬作業運行,所以返回的是接收到的作業
        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實現一個最簡單的分布式作業調度系統,希望對大家有所幫助!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python使用multiprocessing實現一個最簡單的分布式作業調度系統

        Python使用multiprocessing實現一個最簡單的分布式作業調度系統:mutilprocess像線程一樣管理進程,這個是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多。 介紹 Python的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多臺機器上。一個服務進程可
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲第一区在线观看| 日韩视频免费一区二区三区| 亚洲国产一二三精品无码| 青娱乐在线免费观看视频| 日本一区二区三区日本免费| 亚洲乱人伦中文字幕无码| 免费的一级片网站| 综合一区自拍亚洲综合图区| 四虎永久免费地址在线网站| 色吊丝免费观看网站| 中文字幕中韩乱码亚洲大片| 99在线视频免费观看| 久久精品国产亚洲AV无码娇色| 91九色精品国产免费| 一区二区亚洲精品精华液| 狼友av永久网站免费观看| 一区二区三区免费精品视频| 亚洲日韩精品射精日| 亚洲一区免费在线观看| 亚洲av永久中文无码精品综合| 亚洲成A人片77777国产| 巨胸喷奶水视频www免费视频| 亚洲AV人人澡人人爽人人夜夜| 国产成人精品免费视频动漫| 亚洲成a∨人片在无码2023| 中文字幕精品亚洲无线码一区| 午夜免费福利片观看| 亚洲gay片在线gv网站| 亚洲综合图色40p| 最近免费视频中文字幕大全| 久久久久久亚洲精品无码| 爱情岛论坛网亚洲品质自拍| 日本免费中文视频| 亚洲欧洲无码一区二区三区| 在线观看亚洲av每日更新| 亚洲无砖砖区免费| 一级毛片免费播放视频| 91嫩草亚洲精品| 中文字幕精品亚洲无线码一区 | 久久无码av亚洲精品色午夜| 亚洲AV无码精品色午夜在线观看|