分布式程序

2021-08-31 18:24:27 字數 2737 閱讀 5611

#分布式程序

#分布式程序六個步驟:

#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)

#關閉處理

分布式程序

分布式程序指的是將process程序分布的多台機器上,充分利用多台機器的效能完成複雜的任務,我們可以將這點應用的分布式爬蟲的開發中。我們舉個簡單例子,服務程序用來設定任務在task queue,並設定介面。任務程序呼叫相同的介面,執行任務,結果寫進result queue taskmanager.p...

python 分布式程序

process可以分布到多台機器上,而thread最多只能分布到同一臺機器的多個cpu上。python的multiprocessing模組不但支援多程序,其中managers子模組還支援把多程序分布到多台機器上。乙個服務程序可以作為排程者,將任務分布到其他多個程序中,依靠網路通訊。由於manager...

Python 分布式程序

分布式程序是將process程序分布到多台伺服器中,利用多台機器的效能完成複雜的任務。可以應用到分布式爬蟲的開發中。分布式程序在python中依然要用到multiprocess模組。它不但支援多程序,其中managers子模組還支援吧多程序分不到多台機器上,可以寫乙個服務程序作為排程者,將任務分不到...