Вы описываете две отдельные проблемы. Во-первых, можно ли вообще отменить HTTP-запрос, сделанный с getPage
? Нет не может Во-вторых, можно ли сгруппировать операции, чтобы их можно было одновременно отменить. Конечно, в этом нет ничего особенного:
def cancel(group):
for job in group:
job.cancel()
group = []
group.append(job1)
group.append(job2)
...
cancel(group)
Здесь нет ничего особенного в Twisted - это просто создание коллекции и последующая работа над ней. Вам не нужен реактор, чтобы помочь или что-нибудь. Что вам нужно, это способ отменить отдельную операцию. Последний выпуск Twisted добавляет Deferred.cancel
(поэтому, в отличие от более раннего поста, на который есть ссылка в ответе pyfunc, у Deferreds есть идея быть отмененным сейчас). Однако для того, чтобы это действительно что-то делало, каждый API, который создает Deferreds - например, getPage
- должен быть обновлен для выполнения соответствующей операции отмены. Начиная с Twisted 10.1, getPage
не обновлялось.
Таким образом, вы можете либо реализовать отмену для getPage
(и добавить ее в Twisted, пожалуйста!), Либо можете забыть о фактической отмене HTTP-запроса и вместо этого просто игнорировать результат при его получении.