1. 程式人生 > >分散式程序

分散式程序

#分散式程序

在這裡插入圖片描述

#分散式程序六個步驟:
#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.')

在這裡插入圖片描述
在這裡插入圖片描述