Postaram się odpowiedzieć na jak najwięcej pytań.
Czy można to (i czy należy) zrobić przy użyciu selera?
Tak, możesz
Używam django. Czy powinienem spróbować użyć django-selery zamiast zwykłego selera?
Django ma dobre wsparcie dla selera i znacznie ułatwiłoby życie podczas rozwoju
Każde z tych zadań może wywoływać inne zadania - takie jak rejestrowanie tego, co się właśnie wydarzyło lub inne rodzaje rozgałęzień. Czy to możliwe?
Możesz rozpocząć podzadania od zadania z ignore_result =true tylko dla efektów ubocznych
Czy zadania mogą zwracać dane, które otrzymują - tj. potencjalnie Kb danych za pośrednictwem selera (w tym przypadku redis jako podstawa) czy też powinny pisać do bazy danych i po prostu przekazywać wskaźniki do tych danych?
Sugerowałbym umieszczenie wyników w db, a następnie przekazanie identyfikatora uszczęśliwiłoby twojego brokera i pracowników. Mniej transferu danych/wytrawiania itp.
Każde zadanie jest w większości związane z operacjami I/O i początkowo zamierzało użyć gevent z wątku sieciowego do rozłożenia żądań i pominięcia projektowania całej kolejki, ale okazało się, że byłoby to ponownie użyte dla innego komponentu. Próba utrzymania całej podróży w obie strony przez Q w czasie rzeczywistym będzie prawdopodobnie wymagała wielu pracowników upewnienia się, że kolejki są w większości puste. Albo to jest? Czy pomogłoby w tym uruchomienie grupy pracowników gvent?
Ponieważ proces jest związany z io, geven na pewno tu pomoże. Jednak to, jaka powinna być współbieżność dla pracownika z puli geven, też szukam odpowiedzi.
Czy muszę pisać konkretne zadania gevent, czy też użyję gevent pooldeal z IO sieci automagicznie?
Gevent robi łatanie małpy automatycznie, gdy używasz go w basenie. Ale biblioteki, których używasz, powinny dobrze współpracować z gevent. W przeciwnym razie, jeśli parsujesz jakieś dane za pomocą simplejson (który jest napisany w c), to zablokuje to inne greenlety geven.
Czy można nadać priorytet niektórym zadaniom?
Nie można przypisać określonych priorytetów do określonych zadań, ale należy skierować je do innej kolejki, a następnie nasłuchiwać tych kolejek przez różną liczbę pracowników. Im więcej pracowników w danej kolejce, tym wyższy byłby priorytet tych zadań w tej kolejce.
A co z utrzymaniem ich w porządku?
Łańcuch to jeden ze sposobów na utrzymanie porządku. Akord to dobry sposób na podsumowanie. Dba o to seler, więc nie musisz się o to martwić. Nawet korzystając z puli gevent, na końcu można by uzasadnić kolejność wykonywania zadań.
Czy powinienem pominąć seler i po prostu użyć kombu?
Możesz, jeśli Twój przypadek użycia nie zmieni się z czasem w coś bardziej złożonego, a także jeśli chcesz samodzielnie zarządzać swoimi procesami przez celeryd + supervisord. Ponadto, jeśli nie zależy Ci na monitorowaniu zadań za pomocą narzędzi takich jak seler, kwiat itp.
Wygląda na to, że seler jest bardziej nastawiony na „zadania”, które można odłożyć na później i nie są wrażliwe na czas.
Seler obsługuje również zaplanowane zadania. Jeśli to masz na myśli, mówiąc o tym stwierdzeniu.
Czy jestem szalony, że staram się zachować to w czasie rzeczywistym?
Nie sądzę. Tak długo, jak Twoi konsumenci są wystarczająco szybcy, będzie to tak dobre, jak w czasie rzeczywistym.
Na jakie inne technologie powinienem się przyjrzeć?
Jeśli chodzi o seler, należy mądrze wybierać sklep z wynikami. Moją sugestią byłoby użycie cassandry. Jest to dobre dla danych w czasie rzeczywistym (zarówno pod względem zapisu, jak i zapytań). Możesz także użyć redis lub mongodb. W rezultacie przychodzą z własnym zestawem problemów. Ale małe poprawki w konfiguracji mogą zajść daleko.
Jeśli masz na myśli coś zupełnie innego niż seler, możesz spojrzeć na asyncio (python3.5) i zeromq, aby osiągnąć to samo. Nie mogę jednak więcej komentować.