Это может показаться немного странным, но возможно ли, что Tornado завершит выполнение будущего после его обертывания в таймаут?Результат будущего Tornado после таймаута
Так что-то вроде этого:
try:
result = yield gen.with_timeout(time.time() + 1, future)
except gen.TimeoutError as e:
print('Timed out!')
Таким образом, в этом случае, future
не завершена до тайм-аута, но я хочу продолжить выполнение независимо вызываемая он имеет.
Выражаясь иначе, я хочу, чтобы иметь возможность использовать это наряду с gen.WaitIterator
, чтобы получить результаты набора фьючерсов, как описано в документе:
Если вам нужно, чтобы получить результат каждого будущего как можно скорее, или если вам нужен результат некоторых фьючерсов, даже если другие производят ошибки, вы можете использовать
WaitIterator
.
Это именно то, что я ищу, я хочу получить результат каждого будущего как можно скорее, потому что у меня есть некоторые задачи, которые занимают больше времени, чем другие, но за одним исключением: эти медленные задачи должны продолжать производить результаты, чтобы я мог получить доступ их позже.
Возможно ли это?
Я думаю, что я могу использовать класс «Queue» для агрегирования результатов из разных веб-сервисов ... Обычно я хочу получать результаты от различных веб-сервисов (некоторые медленные, некоторые быстрее) и ждать всех результатов для конкретное время. Должен ли я искать пример очереди (веб-паук) в документах? Кроме того, можно ли вместо этого использовать 'concurrent.futures.ThreadPoolExecutor'? (так как он также имеет ['concurrent.futures.wait'] (https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.wait)) –
Да, демо-версия веб-сканера - это лучший пример использования очереди. Просто поместите результат каждой выборки в очередь и зачитайте их в «основной» задаче. Вы не можете использовать AsyncHTTPClient с ThreadPoolExecutor (вы могли бы использовать синхронный HTTP-клиент, но это было бы дороже, чем безпоточный). –