Как отменить цикл asyncio.call_later()?

#python #python-asyncio #event-loop

#python #python-asyncio #цикл событий

Вопрос:

Если я запланирую обратный вызов с помощью loop.call_later() (или с помощью loop.call_at() , который ведет себя таким же образом), можно ли отменить его выполнение?

Почему? Допустим, я планирую запустить что-то через одну минуту. Однако из-за какого-то условия код решает прервать это выполнение (поскольку оно больше не требуется) или, альтернативно, решает перенести его на другое время. Вопрос в том, как реализовать это с помощью Python asyncio ?

Если вы знакомы с JavaScript, я ищу эквиваленты setTimeout() и clearTimeout() .

Комментарии:

1. Я был бы признателен за комментарий о том, почему этот вопрос был отклонен. Я искал его как в Интернете, так и в StackOverflow перед публикацией. Я также старался быть ясным и прямолинейным по существу и по теме.

2. Я не сторонник отрицательного ответа, но можно с уверенностью предположить, что это связано с тем фактом, что правильный ответ содержится во втором предложении связанной документации. Всплывающая подсказка downvote гласит «не показывает исследовательские усилия», так что это веская причина для понижения рейтинга, хотя в этом случае я лично не стал бы понижать рейтинг, потому что ясно, что исследование было проведено — ленивый человек просто не стал бы утруждать себя включением ссылки! — но важнейшая информация была упущена. Что бы это ни было, мой личный совет заключался бы в том, чтобы просто забыть об этом — несправедливые отрицательные оценки — это факт жизни на SO.

3. @user4815162342, конечно, я оставлю это без внимания. Я просто хотел получить некоторую обратную связь на будущее. Спасибо!

Ответ №1:

Из документов, на которые вы ссылались:

Возвращается экземпляр asyncio.TimerHandle , который можно использовать для отмены обратного вызова.

И из документов asyncio.Handle , суперкласс asyncio.TimerHandle :

отмена()

Отмените обратный вызов. Если обратный вызов уже был отменен или выполнен, этот метод не имеет эффекта.

Поэтому просто вызовите cancel метод дескриптора.

Комментарии:

1. Я несколько раз просматривал документацию, и все же я пропустил это предложение! Возможно, потому, что я ожидал активного голоса («Верните экземпляр …») вместо пассивного голоса («Возвращается экземпляр foobar»). Спасибо, что указали на это!