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 ...