Итак, я пытался использовать библиотеку asyncio, и ...
Вот моя цель: создать программу, которая периодически отображает сообщение. Это сообщение может быть изменено пользователем в любое время.
Мне кажется, что я близок к решению с помощью следующего кода, но есть одна проблема, которую я не могу решить.
import asyncio
import msvcrt
class PeriodicMessage():
def __init__(self, message="This is a periodic message. Press M to modify it."):
self.message = message
async def write_message(self, sleep_delay=1):
while True:
print(self.message)
await asyncio.sleep(sleep_delay)
async def change_message(self, sleep_delay=0.01):
while True:
if msvcrt.kbhit():
key_pressed = msvcrt.getch() or None
if key_pressed == b'm':
self.message = input("Enter a new message to display : ")
await asyncio.sleep(sleep_delay)
async def main(self):
await asyncio.gather(self.write_message(), self.change_message())
if __name__ == "__main__":
periodic_msg = PeriodicMessage()
asyncio.run(periodic_msg.main())
Если вы запустите это, вы увидите, что сообщение действительно отображается периодически. И вы можете нажать M, чтобы изменить сообщение. Однако проблема заключается в том, что функция «input ()» блокирует программу, делая ее больше не асинхронной. Я где-то читал, что асинхронный ввод в python на самом деле не вещь, но я не мог подтвердить это, так как видел это только из одного источника.
Может быть, я совершенно не прав, и решение Я сейчас исследую это просто не правильно.
Есть идеи? Заранее спасибо!