Я пытаюсь создать клиент командной строки WebSocket, который ожидает сообщений от сервера WebSocket, но одновременно ожидает ввода данных пользователем.
Регулярный опрос нескольких сетевых источников каждую секунду нормально работает на сервере. , (тот, который работает в localhost:6789
в этом примере), но вместо использования обычного sleep()
метода Python, он использует asyncio.sleep()
, что имеет смысл, потому что спящий и асинхронный спальные не одно и то же, по крайней мере, не подкапот.
Точно так же ожидание пользовательского ввода и асинхронное ожидание пользовательского ввода - это не одно и то же, но я не могу понять, как асинхронно ожидать пользовательского ввода так же, как я могу асинхроннождать произвольное количество секунд, чтобы клиент мог обрабатывать входящие сообщения с сервера WebSocket, одновременно ожидая ввода данных пользователем.
Комментарий ниже в else
-пункте monitor_cmd()
, надеюсь, объясняетчто я получаю:
import asyncio
import json
import websockets
async def monitor_ws():
uri = 'ws://localhost:6789'
async with websockets.connect(uri) as websocket:
async for message in websocket:
print(json.dumps(json.loads(message), indent=2, sort_keys=True))
async def monitor_cmd():
while True:
sleep_instead = False
if sleep_instead:
await asyncio.sleep(1)
print('Sleeping works fine.')
else:
# Seems like I need the equivalent of:
# line = await asyncio.input('Is this your line? ')
line = input('Is this your line? ')
print(line)
try:
asyncio.get_event_loop().run_until_complete(asyncio.wait([
monitor_ws(),
monitor_cmd()
]))
except KeyboardInterrupt:
quit()
Этот код просто ждет вводано бесконечно и больше ничего не делает в то же время, и я понимаю, почему. Что я не понимаю, так это как это исправить. :)
Конечно, если я думаю об этой проблеме неправильно, я был бы очень рад узнать, как исправить это.