Używamy aplikacji RQ z naszą aplikacją WSGI. To, co robimy, ma kilka różnych procesów na różnych serwerach zaplecza, które wykonują zadania, łącząc się z (prawdopodobnie) kilkoma różnymi serwerami zadań. Aby lepiej skonfigurować tę konfigurację, używamy niestandardowej warstwy zarządzania w naszym systemie, która zajmuje się uruchamianiem pracowników, ustawianiem kolejek zadań itp.Ponowna próba nieudanych prac w RQ
Gdy zadanie się nie powiedzie, chcielibyśmy zaimplementować ponowną próbę, która ponawia próbę zadanie kilka razy po rosnącym opóźnieniu, a ostatecznie albo je ukończyć albo go zawieść, a następnie zaloguj się do naszego systemu rejestrowania błędów. Jednak nie jestem pewien, jak to powinno zostać wdrożone. Już utworzony niestandardowy skrypt pracownika, który pozwala nam na log błędu do naszej bazy danych, a moja pierwsza próba ponownego było coś na wzór tego:
# This handler would ideally wait some time, then requeue the job.
def worker_retry_handler(job, exc_type, exc_value, tb):
print 'Doing retry handler.'
current_retry = job.meta[attr.retry] or 2
if current_retry >= 129600:
log_error_message('Job catastrophic failure.', ...)
else:
current_retry *= 2
log_retry_notification(current_retry)
job.meta[attr.retry] = current_retry
job.save()
time.sleep(current_retry)
job.perform()
return False
Jak już wspomniałem, mamy także funkcji w plik roboczy, który poprawnie rozpoznaje serwer, z którym powinien się połączyć i może publikować zadania. Problem niekoniecznie polega na tym, że aby opublikować zadanie, należy wykonać , ale należy wykonaćz instancją zadania, która znajduje się w procedurze obsługi wyjątku.
Każda pomoc zostanie bardzo doceniona. Jeśli istnieją sugestie lub wskazówki na temat lepszych sposobów, aby to zrobić, byłoby również świetne. Dzięki!
Przykro mi, nie znam się na RQ - czy możesz podać link do biblioteki? – necaris
Zgaduję, że masz na myśli http://python-rq.org/ prawda? – Borys