我有两个服务器,用异步服务器启动\:
asyncio.start_server(self.handle_connection, host = host, port = port)并在一个循环中运行:loop.run_until_complete(asyncio.gather(server1, server2))
loop.run_forever()
我在用异步队列在服务器之间进行通信。通过queue.put(msg)添加的来自Server2的消息由Server1中的queue.get()成功接收。我正在运行queue.get(),并将其用作
add_done_callback来自服务器1的方法:
^{2}$
但是这个callback没有按预期工作-自我.msg不要更新。我做错什么了?在
更新
用附加代码显示max完整示例:class Queue(object):
def __init__(self, loop, maxsize: int):
self.instance = asyncio.Queue(loop = loop, maxsize = maxsize)
async def put(self, data):
await self.instance.put(data)
async def get(self):
data = await self.instance.get()
self.instance.task_done()
return data
@staticmethod
def get_instance():
return Queue(loop = asyncio.get_event_loop(), maxsize = 10)
服务器类:class BaseServer(object):
def __init__(self, host, port):
self.instance = asyncio.start_server(self.handle_connection, host = host, port = port)
async def handle_connection(self, reader: StreamReader, writer: StreamWriter):
pass
def get_instance(self):
return self.instance
@staticmethod
def create():
return BaseServer(None, None)
接下来我要运行服务器:loop.run_until_complete(asyncio.gather(server1.get_instance(), server2.get_instance()))
loop.run_forever()
在server2的handle_connection中,我调用的是queue.put(msg),在server1的handle_connection中,我注册了{}作为任务:task_queue = asyncio.ensure_future(queue.get())
task_queue.add_done_callback(self.process_queue)
server1的process_queue方法:def process_queue(self, future):
msg = future.result()
self.msg = msg
server1的handle_connection方法:async def handle_connection(self, reader: StreamReader, writer: StreamWriter):
task_queue = asyncio.ensure_future(queue.get())
task_queue.add_done_callback(self.process_queue)
while self.msg != SPECIAL_VALUE:
# doing something
虽然task_queue已完成,self.process_queue被调用,self.msg从不更新。在