windows下分布式进程问题,得到的队列管理类对象在调用注册的方法后,调用管理实例的方法报错没有该方法!十分感谢!

新手上路,请多包涵

创建服务进程总共需要六步

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()
阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题