2013-09-05 22 views
7

Próba znalezienia dobrego sposobu na przekroczenie limitu czasu zadania RQ, aby można było go zażądać po upływie limitu czasu.Jak poprawnie przechwytywać i przetwarzać limity czasu RQ w Pythonie?

Zasadniczo prawidłowe rozwiązanie zapewni sposób (na przykład procedurę obsługi wyjątku w module roboczym lub coś w tym rodzaju), aby zażądać wykonania zadania, którego czas upłynął. Ponadto, jeśli zadanie wraca do kolejki failed, jest to również dobra odpowiedź.

Dziękuję bardzo! Każda pomoc zostanie doceniona!

Odpowiedz

3

Wygląda na to, że chcesz użyć exception handling. Z dokumentacji:

Zadanie może zakończyć się niepowodzeniem z powodu występujących wyjątków. Kiedy twoi pracownicy RQ działają w tle, w jaki sposób otrzymujesz powiadomienie o tych wyjątkach?

Domyślnie: kolejka zakończona niepowodzeniem Domyślną siatką bezpieczeństwa dla RQ jest nieudana kolejka . Każde zadanie, które nie działa, jest przechowywane tutaj, wraz z jego informacją o wyjątku (typ, wartość, traceback). Chociaż powoduje to, że żadne nieudane zadania nie zostaną "zgubione", nie ma sensu otrzymywać ostrzeżenia o błędzie pracy.

Niestandardowe procedury obsługi wyjątków Począwszy od wersji 0.3.1 program RQ obsługuje rejestrowanie niestandardowych procedur obsługi wyjątków. Umożliwia to zastąpienie domyślnego zachowania (wysłanie zadania do kolejki nieudanej) łącznie z lub podjęcie dodatkowych kroków w przypadku wystąpienia wyjątku.

Można również przechowywać pracy w REDiS sortowane zestaw z job_id jako klucz i time.time() + timeout jako wynik, a potem mieć przebieg procesu pracownik ZRANGEBYSCORE sorted_set 0 [current_time] i cokolwiek jest zwracany jako timed out pracy.

+2

Dzięki! To jest poprawne. W celu późniejszego odniesienia, zadanie wywołuje 'JobTimeoutException', który może być obsługiwany przez procedurę obsługi wyjątków, ale można ją zdefiniować. –