python 分布式程序

2021-10-02 18:03:56 字數 2326 閱讀 7755

process可以分布到多台機器上,而thread最多只能分布到同一臺機器的多個cpu上。

python的multiprocessing模組不但支援多程序,其中managers子模組還支援把多程序分布到多台機器上。乙個服務程序可以作為排程者,將任務分布到其他多個程序中,依靠網路通訊。由於managers模組封裝很好,不必了解網路通訊的細節,就可以很容易地編寫分布式多程序程式。

#task_master.py

import multiprocessing.managers import basemanager

import queue,time,random

que_num =

10task_queue = queue.queue(que_num)

result_queue = queue.queue(que_num)

defget_task()

:return task_queue

defget_result()

:return result_queue

basemanager.register(

'get_task'

,callable

=get_task)

basemanager.register(

'get_result'

,callable

=get_result)

manager = queuemanager(address=

('127.0.0.1'

,5000

), authkey=b'abc'

)manager.start(

)try

:#通過網路獲取任務佇列和結果佇列

task = manager.get_task(

);

result = manager.get_result();

#新增任務

for i in

range

(task_number)

:print

('put task %d...'

% i)

task.put(i)

;#每秒檢測一次是否所有任務都被執行完

while

not result.full(

):

time.sleep(1)

;for i in

range

(result.qsize())

:

ans = result.get();

print

('task %d is finish , runtime:%d s'

% ans)

;except

:print

('manager error');

finally

:#一定要關閉,否則會爆管道未關閉的錯誤

manager.shutdown(

);

#task_worker.py

import time,sys,queue,random

from multiprocessing.managers import basemanager

basemanager.register(

'get_task'

)basemanager.register(

'get_result'

)m = basemanager(address =

('127.0.0.1'

,9000

),authkey=b'abc'

)try

: m.connect(

)except

:print

('connect failed'

) sys.exit(

)task = m.get_task(

)result = m.get_result(

)while

not task.empty():

n = task.get(timeout =1)

print

('run task %d'

% n)

sleeptime = random.randint(0,

3)time.sleep(sleeptime)

rt =

(n, sleeptime)

result.put(rt)

if __name__==

'__main__'

:pass

Python 分布式程序

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

python 學習 分布式程序

伺服器端 import random,time,queue from multiprocessing.managers import basemanager 傳送任務的佇列 task queue queue.queue 接收結果的佇列 result queue queue.queue class q...

Python之 分布式程序

要實現上面的功能,建立分布式程序需要分為六個步驟 接下來通過程式實現上面的例子 linux版本 首先編寫的是服務程序。如下 coding utf 8 author liuyazhuang date 2018 10 14 10 18 description 分布式服務程序linux版 version ...