python分散式學習記錄
根據網上資料學習了python分散式程序,大體使用方法總結,以及注意點如下:
首先是master部分:
-
繼承multiprocessing模組的managers子模組中的BaseManager, 如類名為QueueManager
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass -
master中建立queue,並且提供函式獲取queue
task_queue = queue.Queue()
def func():
global task_queue
return task_queue -
使用QueueManager將Queue註冊到網上使用QueueManager將Queue註冊到網上
需要注意的是, 註冊時使用lambda會報錯,需按下面呼叫:
QueueManager.register(‘get_task_queue’, callable=func)意思是把func的功能在網路上通過get_task_queue來呼叫 -
manager = QueueManager(address=(‘127.0.0.1’, 5000), authkey=b’abc’)
manager.start()
task_queue = manager.get_task_queue()
注意這裡一定要填寫地址,否則執行fail -
需要注意的是manager的這些操作需要在主函式中執行,所以程式碼要放在main下面:
from multiprocessing import freeze_support
if _ name_ == ‘_main _’:
freeze_support()
Worker部分:
和master部分很像,但不需一定在main中執行。
6. 構建QueueManager
class QueueManager(BaseManager):
pass
7. 註冊介面
QueueManager.register(‘get_task_queue’)
8. 構造QueManager例項
manager=QueueManager(address=(‘127.0.0.1’, 5000), authkey=b’abc’)
如果是其他機器執行worker,地址要更換為master所在機器ip地址
9. manager.connect()
10. 取得queue通過manager
task = manager.get_task_queue()