创建服务进程总共需要六步
import time,random,queue,sys
from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support
class QueueManager(BaseManager):
pass
第一步,创建两个队列
task_number = 10
task_queue = queue.Queue(task_number)
result_queue = queue.Queue(task_number)
第二步,注册两个队列到网络,利用的是register方法,在回调函数里传入相应的队列对象
windows下绑定调用接口不能使用lambda,所以只能先定义函数再绑定
def get_task():
return task_queue
def get_result():
return result_queue
def server_start():
QueueManager.register('get_task_queue',callable=get_task)#callable 接收的实际是一个函数
QueueManager.register('get_result_queue',callable=get_result)
#第三步,创建管理类实例,绑定端口和验证口令
manager = QueueManager(address=('127.0.0.1',5000),authkey=b'oliver')#这里必须要转换成字节流不能是字符串
#第四步,启动管理类,监听通信信道
manager.start()
#第五步,通过管理实例方法获得网络访问的Queue对象,因为服务器进程要发布任务
try:
task = manager.get_task_queue()
result = manager.get_result_queue()
#第六步,添加相应的任务
for url in ['ImageUrl_' + str(i) for i in range(10)]:
print('put url:%s'%(url))
task.put(url)
#获取返回结果
print('try get result..')
for i in range(10):
print('result is %s '%result.get(timeout = 10))
except:
print('Manager error')
finally:
manager.shutdown()
if name == '__main__':
freeze_support()
server_start()