欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python分布式編程實(shí)現(xiàn)過(guò)程解析

 更新時(shí)間:2019年11月08日 15:43:14   作者:Mars.wang  
這篇文章主要介紹了python分布式編程實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

分布式編程的難點(diǎn)在于:

1.服務(wù)器之間的通信,主節(jié)點(diǎn)如何了解從節(jié)點(diǎn)的執(zhí)行進(jìn)度,并在從節(jié)點(diǎn)之間進(jìn)行負(fù)載均衡和任務(wù)調(diào)度;

2.如何讓多個(gè)服務(wù)器上的進(jìn)程訪問(wèn)同一資源的不同部分進(jìn)行執(zhí)行

第一部分涉及到網(wǎng)絡(luò)編程的底層細(xì)節(jié)

第二個(gè)問(wèn)題讓我聯(lián)想到hdfs的一些功能。

首先分布式進(jìn)程還是解決的是單機(jī)單進(jìn)程無(wú)法處理的大數(shù)據(jù)量大計(jì)算量的問(wèn)題,希望能加通過(guò)一份代碼(最多主+從兩份)來(lái)并行執(zhí)行一個(gè)大任務(wù)。

這就面臨兩個(gè)問(wèn)題,首先將程序分布到多臺(tái)服務(wù)器,其次將輸入數(shù)據(jù)分配給多臺(tái)服務(wù)器。

第一個(gè)問(wèn)題相對(duì)比較簡(jiǎn)單,畢竟程序一般不會(huì)太長(zhǎng),即便是超級(jí)jar包的spark程序,也不過(guò)百兆。

但數(shù)據(jù)里不同,如今企業(yè)級(jí)別的數(shù)據(jù)動(dòng)輒GB、TB,如果在分布式程序執(zhí)行之前首先要進(jìn)行大容量數(shù)據(jù)的轉(zhuǎn)移,顯然是不可取的。

這時(shí)候我們就需要一個(gè)中央共享數(shù)據(jù)源,所有服務(wù)器都可以對(duì)這個(gè)數(shù)據(jù)源進(jìn)行并行存取(塊block),這就已經(jīng)非常接近hdfs的功能。

因?yàn)樵趆dfs中,集群中的多臺(tái)服務(wù)器共享同一個(gè)hdfs,每臺(tái)機(jī)器訪問(wèn)hdfs就像訪問(wèn)本地?cái)?shù)據(jù)一樣(還是稍微慢一點(diǎn));

計(jì)算任務(wù)執(zhí)行完之后,每臺(tái)服務(wù)器還可以將自己的計(jì)算結(jié)果寫回hdfs,每臺(tái)服務(wù)器的結(jié)果被存儲(chǔ)成了結(jié)果目錄中的小文件。

# task_master.py

import random, time, queue
from multiprocessing.managers import BaseManager

# 發(fā)送任務(wù)的隊(duì)列:
task_queue = queue.Queue()
# 接收結(jié)果的隊(duì)列:
result_queue = queue.Queue()

# 從BaseManager繼承的QueueManager:
class QueueManager(BaseManager):
  pass

# 把兩個(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)
# 綁定端口5000, 設(shè)置驗(yàn)證碼'abc':
manager = QueueManager(address=('', 5000), authkey=b'abc')
# 啟動(dòng)Queue:
manager.start()
# 獲得通過(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.')
# task_worker.py

import time, sys, queue
from multiprocessing.managers import BaseManager

# 創(chuàng)建類似的QueueManager:
class QueueManager(BaseManager):
  pass

# 由于這個(gè)QueueManager只從網(wǎng)絡(luò)上獲取Queue,所以注冊(cè)時(shí)只提供名字:
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')

# 連接到服務(wù)器,也就是運(yùn)行task_master.py的機(jī)器:
server_addr = '127.0.0.1'
print('Connect to server %s...' % server_addr)
# 端口和驗(yàn)證碼注意保持與task_master.py設(shè)置的完全一致:
m = QueueManager(address=(server_addr, 5000), authkey=b'abc')
# 從網(wǎng)絡(luò)連接:
m.connect()
# 獲取Queue的對(duì)象:
task = m.get_task_queue()
result = m.get_result_queue()
# 從task隊(duì)列取任務(wù),并把結(jié)果寫入result隊(duì)列:
for i in range(10):
  try:
    n = task.get(timeout=1)
    print('run task %d * %d...' % (n, n))
    r = '%d * %d = %d' % (n, n, n*n)
    time.sleep(1)
    result.put(r)
  except Queue.Empty:
    print('task queue is empty.')
# 處理結(jié)束:
print('worker exit.')

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Python中的普通函數(shù)和高階函數(shù)

    詳解Python中的普通函數(shù)和高階函數(shù)

    這篇文章主要為大家介紹了Python中的普通函數(shù)和高階函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • openCV-Python筆記之解讀圖像的讀取、顯示和保存問(wèn)題

    openCV-Python筆記之解讀圖像的讀取、顯示和保存問(wèn)題

    這篇文章主要介紹了openCV-Python筆記之解讀圖像的讀取、顯示和保存問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python中你應(yīng)該知道的一些內(nèi)置函數(shù)

    Python中你應(yīng)該知道的一些內(nèi)置函數(shù)

    python提供了內(nèi)聯(lián)模塊buidin,該模塊定義了一些軟件開發(fā)中常用的函數(shù),這些函數(shù)實(shí)現(xiàn)了數(shù)據(jù)類型的轉(zhuǎn)換,數(shù)據(jù)的計(jì)算,序列的處理等功能。下面這篇文章主要給大家介紹了Python中一些大家應(yīng)該知道的內(nèi)置函數(shù),文中總結(jié)的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Python實(shí)現(xiàn)購(gòu)物程序思路及代碼

    Python實(shí)現(xiàn)購(gòu)物程序思路及代碼

    本文給大家分享的是使用Python實(shí)現(xiàn)的購(gòu)物小程序的思路要求以及相關(guān)代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2017-07-07
  • 在Python中給Nan值更改為0的方法

    在Python中給Nan值更改為0的方法

    今天小編就為大家分享一篇在Python中給Nan值更改為0的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 一篇文章教你用Python繪畫一個(gè)太陽(yáng)系

    一篇文章教你用Python繪畫一個(gè)太陽(yáng)系

    這篇文章主要給大家介紹了關(guān)于如何利用Python繪畫一個(gè)太陽(yáng)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • 利用python3隨機(jī)生成中文字符的實(shí)現(xiàn)方法

    利用python3隨機(jī)生成中文字符的實(shí)現(xiàn)方法

    最近在學(xué)習(xí)python3,發(fā)現(xiàn)網(wǎng)上關(guān)于ptyhon3隨機(jī)生成中文的資料非常少,所以決定將自己實(shí)現(xiàn)的方法分享下,下面這篇文章主要給大家介紹了關(guān)于利用python3隨機(jī)生成中文字符的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-11-11
  • Python列表元素刪除和remove()方法詳解

    Python列表元素刪除和remove()方法詳解

    這篇文章主要給大家介紹了關(guān)于Python列表元素刪除和remove()方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之最近鄰kNN分類器

    python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之最近鄰kNN分類器

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之最近鄰kNN分類器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python如何發(fā)送Syslog日志

    Python如何發(fā)送Syslog日志

    這篇文章主要介紹了Python如何發(fā)送Syslog日志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論