根据网上资料学习了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()