Есть ли способ прервать асинхронный сон в случайный момент?Python

Программы на Python
Ответить
Anonymous
 Есть ли способ прервать асинхронный сон в случайный момент?

Сообщение Anonymous »

Мне нужна моя программа, чтобы останавливать асинхронный сон при изменении переменной. Поиск в Google дает только возможное решение, заключающее asyncio.sleep в задачу, которую нужно отменить, например:

Код: Выделить всё

import asyncio

async def f(duration: int) -> None:
await asyncio.sleep(duration)

async def main():
condition = False
task = asyncio.create_task(f(10))
await task
condition = bool(some_random_bool)
"""^^^this is supposed to be set
somewhere within the ten seconds;
in my case it should be a change
of a telegram user's state"""
if condition:
task.cancel()

if __name__ == "__main__":
asyncio.run(main())
Но этот код не работает так, как я хочу, потому что уже ожидаемая задача не будет отменена. Это произойдет только в том случае, если вы поместите строку отмены перед строкой ожидания. Я не совсем понимаю, какой смысл ждать задачи после ее предварительной отмены (возможно, я не совсем понимаю асинхронный жаргон, и cancel() — это не то, что мне нужно).
Поэтому мне интересно, есть ли на самом деле способ остановить выполнение задачи вокруг сопрограммы на полпути.


Подробнее здесь: https://stackoverflow.com/questions/791 ... dom-moment
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»