История изменений
Исправление vvn_black, (текущая версия) :
Если в терминах asyncio
, то схема такая:
q = asyncio.Queue()
...
while True:
listener_task = asyncio.ensure_future(transport.receive())
sender_task = asyncio.ensure_future(q.get())
done, pending = await asyncio.wait([listener_task, sender_task],
return_when=asyncio.FIRST_COMPLETED)
if listener_task in done:
# обработка ответа
answer = listener_task.result()
if sender_task in done:
# шлём команду
message = sender_task.result()
transport.send(message)
...
# совсем в другом месте формируем сообщения на отправку
await q.put(message)
P.S. Очень похоже на реализацию работы с вебсокетами.
Исправление vvn_black, :
Если в терминах asyncio
, то схема такая:
q = asyncio.Queue()
...
while True:
listener_task = asyncio.ensure_future(transport.receive())
sender_task = asyncio.ensure_future(q.get())
done, pending = await asyncio.wait([listener_task, sender_task],
return_when=asyncio.FIRST_COMPLETED)
if listener_task in done:
# обработка ответа
answer = listener_task.result()
if sender_task in done:
# шлём команду
message = sender_task.result()
transport.send(message)
...
# совсем в другом месте формируем сообщения на отправку
await q.put(message)
P.S. Очень похоже на реализацию работы с вебсокетами.
Исправление vvn_black, :
Если в терминах asyncio
, то схема такая:
q = asyncio.Queue()
...
listener_task = asyncio.ensure_future(transport.receive())
sender_task = asyncio.ensure_future(q.get())
done, pending = await asyncio.wait([listener_task, sender_task],
return_when=asyncio.FIRST_COMPLETED)
if listener_task in done:
# обработка ответа
answer = listener_task.result()
if sender_task in done:
# шлём команду
message = sender_task.result()
transport.send(message)
...
# совсем в другом месте формируем сообщения на отправку
await q.put(message)
P.S. Очень похоже на реализацию работы с вебсокетами.
Исходная версия vvn_black, :
Если в терминах asyncio
, то схема такая:
q = asyncio.Queue()
...
listener_task = asyncio.ensure_future(transport.receive())
sender_task = asyncio.ensure_future(q.get())
done, pending = await asyncio.wait([listener_task, sender_task],
return_when=asyncio.FIRST_COMPLETED)
if listener_task in done:
# обработка ответа
if sender_task in done:
# шлём команду
message = sender_task.result()
transport.send(message)
...
# совсем в другом месте формируем сообщения на отправку
await q.put(message)
P.S. Очень похоже на реализацию работы с вебсокетами.