Я пытаюсь реализовать довольно простое асинхронное приложение, используя pysnmp-lextudio. В идеале я хотел бы предложить командную строку, которая позволяла бы мне отправлять команды (получить/установить), а также получать уведомления о входящих ловушках/информациях.
Я думаю Я реализовал аспект командной строки, используя код, похожий на:
Код: Выделить всё
async def interactive_prompt():
"""Provide a continuous prompt for user input."""
print("Enter 'help' for a list of commands.")
while True:
user_input = input("> ").strip()
await process_command(user_input)
async def main():
await asyncio.gather(
# receive_notifications(),
interactive_prompt()
)
if __name__ == "__main__":
asyncio.run(main())
Однако мне трудно понять, как различные примеры обработки уведомлений вписываются в эту настройку (если вообще вписываются). Пример, представленный здесь:
https://docs.lextudio.com/pysnmp/exampl ... ort-tweaks, кажется, блокируется в следующих местах:
Код: Выделить всё
...
try:
# Dispatcher will never finish as job#1 never reaches zero
transportDispatcher.runDispatcher()
finally:
transportDispatcher.closeDispatcher()
Предполагая, что это действительно блокируется, мое первое предположение (исходящее из мира C++) заключается в том, что это должно существовать в отдельном потоке, поскольку оно никогда не позволит запускать другие задачи. Я, очевидно, новичок в мире асинхронного Python, так что, возможно, я упускаю здесь что-то очевидное. Мои попытки покопаться в коде ни к чему не привели. Я был бы очень признателен за некоторые разъяснения по этому поводу. Ошибся ли я, принимая asyncio? Должен ли я следовать своему инстинкту и вернуться к использованию подпроцесса?
Подробнее здесь:
https://stackoverflow.com/questions/788 ... io-context