Mam dwa rodzaje zadań. Zadanie A generowane jest przez selerbeat co godzinę. Działa natychmiast i generuje tysiąc (lub wiele tysięcy) przypadków Zadania B, z których każda ma ETA jednego dnia w przyszłości.W selera, w jaki sposób mogę blokować nowsze zadania z opóźnionym opóźnieniem?
Po uruchomieniu instancja zadania A działa i generuje tysiąc Bs. I od tej pory nic się nie dzieje. Powinienem zobaczyć kolejną A biegnącą co godzinę, z kolejnym tysiącem Bs. Ale w rzeczywistości nic nie widzę.
Na zamrożeniu, rabbitmqctl pokazuje 1000 wiadomości, z 968 gotowymi i 32 niepotwierdzonymi. Godzinę później jest 1001 wiadomości, 969 gotowych i 32 niepotwierdzonych. I tak dalej, co godzinę jedna nowa wiadomość sklasyfikowana jako gotowa. Można przypuszczać, że pracownik pobiera 32 wiadomości, ale nie może ich podjąć, ponieważ ich ETA jest nadal w przyszłości. W międzyczasie nie można uruchamiać nowszych zadań, które powinny teraz działać.
Jaki jest właściwy sposób postępowania z tym? Zgaduję, że potrzebuję wielu pracowników, a może wielu kolejek (ale nie jestem pewien tego ostatniego punktu). Czy jest prostszy sposób? Próbowałem manipulować przy CELERYD_PREFETCH_MULTIPLIER i -Ofail (jak omówiono tutaj: http://celery.readthedocs.org/en/latest/userguide/optimizing.html), ale nie mogę go uruchomić. Czy moje pytanie jest takie samo jak to: [[Django Celery]] Celery blocked doing IO tasks?
W każdym razie: mogę rozwiązać ten problem tylko dlatego, że wiem wiele na temat charakteru zadań i ich czasu. Czy nie wydaje Ci się, że wystarczająca liczba zadań z przyszłą ETA może zablokować cały system? Jeśli poczekam kilka godzin, a następnie zabiję i zrestartuję robotnika, to po raz kolejny chwyta pierwsze 32 zadania i zawiesza się, mimo że w tym momencie są zadania w kolejce, które są gotowe do uruchomienia właśnie teraz. Czy jakiś komponent nie powinien być wystarczająco inteligentny, aby patrzeć na ETA i ignorować zadania, które nie są możliwe do uruchomienia?
ADDENDUM: Teraz uważam, że problem jest znanym błędem, gdy RabbitMQ 3.3 jest używany z programem Celery 3.1.0. Więcej informacji: https://groups.google.com/forum/#!searchin/celery-users/countdown|sort:date/celery-users/FiAAESOzezA/499OH-pylacJ
Po aktualizacji do Selera 3.1.1, rzeczy wydają się lepsze. Zadanie A działa co godzinę (cóż, trwa to przez kilka godzin) i planuje kopie zadania B. Wydaje się, że wypełnia on pracownika: liczba nie potwierdzonych wiadomości wciąż rośnie. Będę musiał sprawdzić, czy może rosnąć bez ograniczeń.
Tak, RabbitMQ 3,3 złamał rzeczy. Miałem te same problemy, a Ask szybko wypuścił wersję 3.1.11, Kombu 3.0.13 i librabbitmq 1.5.0. –
Dziękuję, straciłem cały dzień próbując dowiedzieć się, co było nie tak, dopóki nie znalazłem tego! –
Rozwiązałeś to teraz? – nvartolomei