一 服务进程:
from multiprocessing.managers import BaseManager
import Queue,time,random
queue=Queue.Queue()
class QueueManager(BaseManager):
pass
QueueManager.register('get_queue',callable=lambda:queue)
m = QueueManager(address=('', 5000), authkey='abc')
m.start()
task_queue = m.get_queue()
for i in range(10):
n=task_queue.get()
print n
m.shutdown()
二:分布进程
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
QueueManager.register('get_queue')
m = QueueManager(address=('127.0.0.1',5000),authkey='abc')
m.connect()
result_queue=m.get_queue()
for i in range(10):
result_queue.put(i)
print 'work exit'
三代码讲解:
Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个进程中,依靠网络通信。由于managers模块封装很好,不必了解网络通信的细节,就可以很容易地编写分布式多进程程序。
服务进程通过把队列queue放到manager中,暴漏在网络上,绑定端口5000,验证码‘abc’,进行监听,客户机器的进程交互。
客户进程通过QueueManager.register获得queue,m = QueueManager(address=('address',5000),authkey='abc'),连接对应的服务进程地址。
连接成功后就可以进行进程间的交互了。
四:运行结果如图