首先實現跨平台的多程序通訊,熟悉生產者-緩衝區-消費者模型,我們都知道產生資料模組為生產者,而處理資料模組稱為消費者,生產者與消費者之間的中介稱之為緩衝區。
在多程序開發中,生產者就是生產資料的程序,消費者就是消費資料的程序,如果生產者與消費者程序速度不一致,就會造成等待現象,而為了解決這種生產、消費能力不均衡的問題,才有了生產者與消費者模式。
在多工處理工作中,程序可以把任務分布到多台機器中,而執行緒只能把任務分布到同一臺機器的多個cpu時間片上。如果把多程序分布到多台機器上,通過乙個服務程序作為排程,把任務分布到其他的子程序中,然後依靠網路通訊就可以實現分布式多程序了。其中python的managers模組封裝的較好,可以實現。
服務程序
import random
import multiprocessing
from multiprocessing.managers import basemanager
from multiprocessing import queue
task_queue = queue()
result_queue = queue()
def return_task_queue():
global task_queue
return task_queue
def return_result_queue():
global result_queue
return result_queue
class queuemanager(basemanager):
pass
if __name__ == '__main__':
queuemanager.register('get_task_queue', callable = return_task_queue)
queuemanager.register('get_result_queue', callable = return_result_queue)
manager = queuemanager(address = ('***.***.***.***',5006), authkey = b'abc')
manager.start()
task = manager.get_task_queue()
result = manager.get_result_queue()
for i in range(10):
n = random.randint(0, 10000)
print('put task %d'% n)
task.put(n)
while true:
print('try to get result')
if(result.qsize() == 10):
for i in range(10):
ret = result.get(timeout = 10)
print('result %s'% ret)
break
manager.shutdown()
任務程序
import time
import multiprocessing
from multiprocessing.managers import basemanager
from multiprocessing import queue
class queuemanager(basemanager):
pass
queuemanager.register('get_task_queue')
queuemanager.register('get_result_queue')
server_address = '***.***.***.***''
print('connect to server %s...' % server_address)
manager = queuemanager(address = (server_address ,5006), authkey = b'abc')
manager.connect()
task = manager.get_task_queue()
result = manager.get_result_queue()
for i in range(10):
try:
n = task.get(timeout = 1)
print('run task %d' % n)
ret = '%d + %d = %d'%(n , n, n+n)
time.sleep(1)
result.put(ret)
except queue.empty:
print('task queue is empty.')
print('worker exit')
注意服務程序先啟動,然後是其他子程序。 需要繫結的是伺服器的ip。
我的電腦上: 伺服器程序
另一台電腦上:任務程序
Python之 分布式程序
要實現上面的功能,建立分布式程序需要分為六個步驟 接下來通過程式實現上面的例子 linux版本 首先編寫的是服務程序。如下 coding utf 8 author liuyazhuang date 2018 10 14 10 18 description 分布式服務程序linux版 version ...
python分布式程序Queue通訊
說明 本篇部落格 於廖雪峰教程 在多程序和多執行緒程式設計中,因為程序更加穩定,且可以分布到多台機器上,而執行緒最多只能分布到一台機器的不同cpu上,所以優選程序 python的multiprocessing模組不但支援多程序,其中managers子模組還支援把多程序分布到多台機器上。乙個服務程序可...
python多程序入門 分布式程序資料共享
1 先來個簡單的 coding utf 8 from multiprocessing import process 定義函式 defadduser print adduser if name main p1 process target adduser p1.start 多程序包multiproce...