Używam Django, Selera i RabbitMQ. Co staram się osiągnąć, to upewnić się, że zadania związane z jednym użytkownikiem są wykonywane w kolejności (konkretnie, jeden w czasie, nie chcę współbieżności zadań na użytkownika).Jak zapewnić kolejność wykonywania zadań na użytkownika przy użyciu Celery, RabbitMQ i Django?
- po dodaniu nowego zadania dla użytkownika powinno zależeć od ostatnio dodanego zadania. Dodatkowa funkcjonalność może obejmować brak dodawania zadania do kolejki, jeśli zadanie tego typu jest ustawione w kolejce dla tego użytkownika i jeszcze się nie uruchomiło.
Robiłem rozeznanie oraz:
- nie mogłem znaleźć sposób, by połączyć nowo utworzone zadanie z jednej kolejce już w samej seler, łańcuchy wydają się być tylko w stanie połączyć nowe zadania .
- Sądzę, że obie funkcje są możliwe do implementacji za pomocą niestandardowego programu obsługi wiadomości RabbitMQ, chociaż może być trudno kodować mimo wszystko.
- Przeczytałem także o selekcji teryktów i może to być najłatwiejszy sposób zapewnienia kolejności wykonania, ale jak połączyć nowe zadanie z "
applied_async
" "task_tree" lub kolejką? Czy jest jakiś sposób, aby zaimplementować tę dodatkową, bez duplikatów funkcjonalność, korzystając z tego pakietu?
Edit: Jest to także ta „blokada” przykład w celery cookbook i jako koncepcja jest w porządku, nie widzę możliwy sposób, aby działać zgodnie z przeznaczeniem w moim przypadku - po prostu jeśli nie mogę pozyskać blokadę dla użytkownika, zadanie musiałoby zostać ponowione, ale oznacza to, że trzeba go przenieść na koniec kolejki.
Jaki byłby najlepszy sposób postępowania?
Zakładam, że nie wiesz, jakie zadania dla danego użytkownika są przed wstawieniem zadania? –
Dlaczego sam nie utworzyć kolejki (na użytkownika) i nie wykonywać zadań z Selera? – trinchet