Тайм-аут сельдерея убьет задания и не поместит их обратно в мою очередь на повторную загрузку. Есть ли способ отловить ошибки тайм-аута?
У меня есть веб-скребок, который делает много запросов. Если я отправляю запросы на 5 мм, я замечаю, что 100 000 из них могут быть отброшены из-за глобального тайм-аута.
Я передаю глобальный тайм-аут на 500 секунд на сельдерея с помощью celery worker -Ofair --concurrency=600 --without-gossip --time-limit=500 --pool=gevent -l critical
.
@task(soft_time_limit=16, )
def urlopen(url):
print('-open: {0}'.format(url))
try:
content, status_code, parsed_data = get_session(url)
# Control flow for what we are going to do with the responses based on status code
if status_code == 200:
if len(parsed_data) > 0:
for item in parsed_data:
add_url_es(item[1], item[2], item[0], url, es)
add_200_urls_to_redis(url)
elif parsed_data is None:
add_urls_to_redis(url)
else:
print(status_code, parsed_data, url)
add_failed_to_redis(url)
elif status_code == 403:
print(' this page has been denied due to {0} error for url {1}'.format(status_code, url))
add_urls_to_redis(url)
elif status_code == 404:
print(' this page does not seem to exist due to {0} error for url {1}'.format(status_code, url))
add_404_urls_to_redis(url)
else:
print('something is really wrong, error code {0}, url = {1}'.format(status_code, url))
add_urls_to_redis(url)
except SoftTimeLimitExceeded:
print('time limit exceeded')
add_urls_to_redis(url)
except Exception as e:
print('unaccounted for error {}'.format(e))
add_urls_to_redis(url)
Я могу легко справиться с мягким таймаутом, но мне интересно, как поймать глобалы.