A服務器是master,B服務器爲worker,服務器
A服務器上執行taskManger.py網絡
# coding:utf-8 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='lsf') #實現第四步:啓動管理,監聽信息通道 manager.start() #實現第五步:經過管理實例的方法得到經過網絡訪問的Queue對象 task=manager.get_task_queue() result=manager.get_result_queue() #實現第六步:添加任務 for url in ["ImageUrl_"+str(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()
B服務器上執行worker的腳本taskWorker.pydom
#coding:utf-8 import time from multiprocessing.managers import BaseManager # 建立相似的QueueManager: class QueueManager(BaseManager): pass # 實現第一步:使用QueueManager註冊獲取Queue的方法名稱 QueueManager.register('get_task_queue') QueueManager.register('get_result_queue') # 實現第二步:鏈接到服務器: server_addr = '127.0.0.1' print('Connect to server %s...' % server_addr) # 端口和驗證口令注意保持與服務進程設置的徹底一致: m = QueueManager(address=(server_addr, 8001), authkey='lsf') # 從網絡鏈接: m.connect() # 實現第三步:獲取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.')