分散式程序
阿新 • • 發佈:2018-11-15
#分散式程序
#分散式程序六個步驟:
#1.建立佇列Queue,用來程序間的通訊。
#2.將佇列Queue進行網路共享給其他程序
#3.建立物件例項,繫結埠和驗證口令
#4.啟動物件例項進行資訊傳輸管理
#5.通過物件例項將網路佇列本地化
#6.分配本地化佇列進行程序任務處理
# 排程服務程序taskmanager.py
import random,time,Queue
from multiprocessing.managers import BaseManager
#第一步,建立task_queue和result_queue,用來存放任務和結果
task_queue = Queue.Queue()
result_queue = Queue.Queue()
class Queuemanager(BaseManager):
pass
#第二步,把建立的兩個佇列註冊到網路,利用register方法,callable引數關聯了Queue物件
#將Queue物件在網路上暴露
Queuemanager.register('get_task_queue',callable=lambda:task_queue)
Queuemanager.register('get_result_queue',callable=lambda:result_queue)
#第三步,繫結埠8001,設定驗證口令‘qiye’相當於物件的初始化
manager = Queuemanager(address=('',8001),authkey='qiye')
#第四步,啟動管理,監聽資訊通道
manager.start()
#第五步,通過管理例項的方法獲得通過網路訪問的Queue物件
task = manager.get_task_queue()
result = manager.get_result_queue()
#第六步,新增任務
for url in ['ImagerUrl'+i for i in range(10)]:
print('put task %s...'url)
task.put(url)
#獲取返回結果
print('try get result...')
for i in range(10):
print('result is %s'%result.get(timeout=10))
#關閉管理
manager.shutdown()
#任務程序taskWorker.py
import time
from multiprocessing.managers import BaseManager
#建立類似的QueueManager
calss QueueManager(BaseManager):
pass
#第一步,使用QueueManager註冊用於獲取Queue的放法名稱
QueueManager.register('get_task_queue')
QueueManager.resgister('get_result_queue')
#第二步,連線到伺服器
server_addr = '127.0.0.1'
print('Connect to server %s...'%server_addr)
#埠和驗證口令注意和服務程序保持一致
m = QueueManager(address=(server_addr,8001),authkey='qiye')
#連結網路
m.conncet()
#第三步,獲取Queue的物件
task = m.get_task_queue()
result = m.get_result.queue()
#第四步,從task佇列獲取任務,把結果寫入result佇列
while(not task.empty()):
image_url = task.get(True,timeout=5)
print('run task download %s...'%image_url)
time.sleep(1)
result.put('%s---->>>success'%image_url)
#關閉處理
print('worker exit.')