python之分布式多程序通訊

2021-09-26 14:50:24 字數 2720 閱讀 1080

首先實現跨平台的多程序通訊,熟悉生產者-緩衝區-消費者模型,我們都知道產生資料模組為生產者,而處理資料模組稱為消費者,生產者與消費者之間的中介稱之為緩衝區。

在多程序開發中,生產者就是生產資料的程序,消費者就是消費資料的程序,如果生產者與消費者程序速度不一致,就會造成等待現象,而為了解決這種生產、消費能力不均衡的問題,才有了生產者與消費者模式。

在多工處理工作中,程序可以把任務分布到多台機器中,而執行緒只能把任務分布到同一臺機器的多個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...