#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»). Спасибо, что указали на это!