我們使用多程序去完成多個任務時會使得我們的工作效率大大提公升,這都是在同一臺電腦上執行的,畢竟一台計算機的資源是有限的,但是當我們將多台計算機使用網路協議同時去處理多個相關聯任務時,我們可用的資源幾乎是無限的。因此我們出現了分布式程序管理。
python中我們前面學習了使用multiprocessing模組來建立與管理多程序,同樣在這個模組裡面有乙個basemanger的類可以實現通過網路來管理多台電腦的程序管理。當然我們在依靠網路通訊將多個任務分配給不同的計算機完成時,總的分為兩個部分:服務端和客戶端。服務端,用於任務的發布、通訊佇列的建立等;客戶端用於完成服務端分配的任務,並將結果放入通訊佇列。
import random
from queue import queue
from multiprocessing.managers import basemanager
#1 建立任務佇列和任務執行節果佇列
task_queue = queue()
result_queue = queue()
#2 將佇列通過網路暴露出去,讓其他主機可以訪問到
basemanager.register('get_task_queue',callable= lambda : task_queue )
basemanager.register('get_result_queue',callable=lambda :result_queue)
#3 繫結乙個埠(0~65535)設定乙個與其他主機相通的驗證碼;
manager = basemanager(address=('192.168.0.9',5111),authkey=b'123456')
#4啟動網路佇列物件
manager.start()
#5獲取通過網路訪問的物件
task = manager.get_task_queue()
result = manager.get_result_queue()
#6 放幾個任務進去:對乙個1到1000的堆積數求平方
for i in range(10):
n = random.randint(1,1000)
print('任務列表加入任務:%s'%(n))
task.put(n)
#7 從result佇列中讀取任務處理的結果
for j in range(10):
r = result.get(20) #等待20s
print('佇列任務的結果:%s'%(r))
#8、關閉伺服器
manager.shutdown()
import queue
from multiprocessing.managers import basemanager
from queue import queue
import time
#1 獲取管理端共享出來的佇列,一定要跟管理端註冊的名稱相同
basemanager.register('get_task_queue')
basemanager.register('get_result_queue')
#2 連線到服務端上
server_addr = '192.168.0.9'
print('正在連線伺服器端%s....'%(server_addr))
#3 埠號和密碼一定要跟管理端保持一致
m = basemanager(address=(server_addr,5111),authkey=b'123456')
#4 連線
m.connect()
#5 獲取queue
task = m.get_task_queue()
result = m.get_result_queue()
#6、讀取管理端的共享任務
for i in range(10):
try:
n = task.get()
#任務內容:對每個任務值求取平方
print('run task %d * %d....'%(n,n))
time.sleep(1)
r = '%d * %d = %d'%(n,n,n*n)
result.put(r)
except queue.empty as eorr:
print('任務隊列為空 ....',eorr)
print('執行結束')
服務端,我們給客戶端分配的任務是將乙個1到1000的隨機值求平方,並返回。執行時需要先執行服務端**,在執行客戶端** Python之 分布式程序
要實現上面的功能,建立分布式程序需要分為六個步驟 接下來通過程式實現上面的例子 linux版本 首先編寫的是服務程序。如下 coding utf 8 author liuyazhuang date 2018 10 14 10 18 description 分布式服務程序linux版 version ...
分布式之分布式事務
被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...
TransactionScope 之分布式配置
本文 transactionscope是個好東西,可以自動管理transaction,即使是對分布式資料庫也可以,但是需要一些配置 摸索了2天。本文的環境為windows 2003 1.對跑 的機器和sql所在的伺服器進行component services的配置 administative too...