ja używam kolejka zadań push od GAE (python). Czasami po X minutach Y% zadań nie powiodło się. W tej sytuacji chcę wyczyścić kolejkę zadań (nie ma potrzeby ich wykonywania, w końcu wielu nie powiedzie się).
Mogę skonfigurować zadanie, aby przestało działać, jeśli ponowi próbę więcej niż 2 razy, ale jeśli mam 100 zadań, które się nie powiodły (300 przebiegów = 100 + 200 prób), jak mogę zatrzymać pozostałe zadania do wykonania?
queue.yaml:
queue:
- name: my-queue
mode: push
rate: 1/s
bucket_size: 10
max_concurrent_requests: 10
retry_parameters:
task_retry_limit: 2
Odpowiedzi:
1 dla odpowiedzi № 1Zachowałbym pewne wartości w memcache, jak number of tasks in queue
i timestamps of tasks that failed
.
Każde zadanie musiałoby wykonać następujące zadania:
- na początku oblicz procentową wartość toczenia (w ciągu ostatnich X minut) i wyjdź, jeśli procent jest zbyt wysoki, lub zwiększ
number of tasks
licznik i kontynuuj. - w przypadku awarii zmniejszyć
number of tasks
licznik i dodaj znacznik czasu dofailed tasks
lista. - na sukces, zmniejsz
number of tasks
licznik.
Aby obliczyć procent walcowania, weź całą listę failed tasks
i odfiltruj te znaczniki czasu, które są zbyt stare (ponad X minut temu). Umieść nową listę z powrotem w memcache. Następnie weź number of tasks
licz i oblicz 100.0 * (number of failed tasks) / (number of tasks)
aby uzyskać swój procent. Jeśli przekroczy próg Y%, natychmiast zakończ zadanie.