亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

介紹

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

想到這,就在想是不是可以使用此模塊來實現(xiàn)一個簡單的作業(yè)調(diào)度系統(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)絡(luò)上
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)聽端口和啟動服務(wù)
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è)并將結(jié)果返回

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)絡(luò)上
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è)并返回結(jié)果,這里只是模擬作業(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,運行結(jié)果如下

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 

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

相關(guān)文章

  • Python腳本Selenium及頁面Web元素定位詳解

    Python腳本Selenium及頁面Web元素定位詳解

    這篇文章主要為大家介紹了Python腳本中如何使用Selenium定位頁面Web元素的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 基于python pygame實現(xiàn)的兔子吃月餅小游戲

    基于python pygame實現(xiàn)的兔子吃月餅小游戲

    pygame是用來開發(fā)游戲的一套基于SDL的模板,它可以是python創(chuàng)建完全界面化的游戲和多媒體程序,而且它基本上可以在任何系統(tǒng)上運行,這篇文章主要給大家介紹了基于python pygame實現(xiàn)的兔子吃月餅小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Python3 max()函數(shù)基礎(chǔ)用法

    Python3 max()函數(shù)基礎(chǔ)用法

    在本篇文章中我們給大家講述了關(guān)于Python3 max()函數(shù)的基本用法以及相關(guān)知識點內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-02-02
  • Python批量創(chuàng)建迅雷任務(wù)及創(chuàng)建多個文件

    Python批量創(chuàng)建迅雷任務(wù)及創(chuàng)建多個文件

    其實不是真的創(chuàng)建了批量任務(wù),而是用python創(chuàng)建一個文本文件,每行一個要下載的鏈接,然后打開迅雷,復(fù)制文本文件的內(nèi)容,迅雷監(jiān)測到剪切板變化,彈出下載全部鏈接的對話框
    2016-02-02
  • 在Python中利用Pandas庫處理大數(shù)據(jù)的簡單介紹

    在Python中利用Pandas庫處理大數(shù)據(jù)的簡單介紹

    這篇文章簡單介紹了在Python中利用Pandas處理大數(shù)據(jù)的過程,Pandas庫的使用能夠很好地展現(xiàn)數(shù)據(jù)結(jié)構(gòu),是近來Python項目中經(jīng)常被使用使用的熱門技術(shù),需要的朋友可以參考下
    2015-04-04
  • python 從csv讀數(shù)據(jù)到mysql的實例

    python 從csv讀數(shù)據(jù)到mysql的實例

    今天小編就為大家分享一篇python 從csv讀數(shù)據(jù)到mysql的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python讀寫文件操作示例程序

    python讀寫文件操作示例程序

    日常操作中,少不了文本處理,如程序輸入數(shù)據(jù)準(zhǔn)備,python憑借其簡潔優(yōu)雅的語法,在文本處理上比C++等編譯型語言開發(fā)效率高出一大截,下面看代碼
    2013-12-12
  • 通過CartPole游戲詳解PPO?優(yōu)化過程

    通過CartPole游戲詳解PPO?優(yōu)化過程

    這篇文章主要為大家介紹了通過CartPole游戲詳解PPO?優(yōu)化過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Python使用Nocalhost并開啟debug調(diào)試的方法

    Python使用Nocalhost并開啟debug調(diào)試的方法

    Nocalhost是一種開發(fā)者工具,支持針對Kubernetes應(yīng)用程序進行調(diào)試和部署,這篇文章主要介紹了Python怎么使用Nocalhost并開啟debug,需要的朋友可以參考下
    2023-04-04
  • 分享一下Python 開發(fā)者節(jié)省時間的10個方法

    分享一下Python 開發(fā)者節(jié)省時間的10個方法

    在這篇文章,我想強調(diào)一些 Python 可以節(jié)約時間并最大限度地提高生產(chǎn)力的方面。在做準(zhǔn)備時,我咨詢了幾個 Pythonists,他們最節(jié)省時間的技巧是什么?答案在這里
    2015-10-10

最新評論