Je viens de découvrir l'option de configuration CELERYD_PREFETCH_MULTIPLIER
( docs ). La valeur par défaut est 4, mais (je crois) que je veux que le prefetching soit désactivé ou aussi bas que possible. Je l'ai réglé sur 1 maintenant, ce qui est assez proche de ce que je recherche, mais il y a encore des choses que je ne comprends pas :
-
Pourquoi ce prefetching est-il une bonne idée ? Je n'en vois pas vraiment la raison, à moins qu'il n'y ait beaucoup de latence entre la file d'attente des messages et les travailleurs (dans mon cas, ils fonctionnent actuellement sur le même hôte et, au pire, ils pourraient éventuellement fonctionner sur des hôtes différents dans le même centre de données). La documentation ne mentionne que les inconvénients, mais n'explique pas quels sont les avantages.
-
Beaucoup de gens semblent mettre cette valeur à 0, s'attendant à pouvoir désactiver le prefetching de cette façon (une supposition raisonnable à mon avis). Cependant, 0 signifie que le prefetching est illimité. Pourquoi quelqu'un voudrait-il un prefetching illimité, cela n'élimine-t-il pas entièrement la concurrence/asynchronicité pour laquelle vous avez introduit une file d'attente de tâches en premier lieu ?
-
Pourquoi ne peut-on pas désactiver le préfixe ? Ce n'est peut-être pas une bonne idée pour les performances de la désactiver dans la plupart des cas, mais y a-t-il une raison technique pour laquelle cela n'est pas possible ? Ou n'est-elle tout simplement pas implémentée ?
-
Parfois, cette option est liée à
CELERY_ACKS_LATE
. Par exemple. Roger Hu écrit "Souvent, ce que [les utilisateurs] veulent vraiment, c'est qu'un travailleur ne réserve qu'autant de tâches qu'il y a de processus enfants. Mais cela n'est pas possible sans activer les accusés de réception tardifs [ ]" Je ne comprends pas comment ces deux options sont liées et pourquoi l'une n'est pas possible sans l'autre. Une autre mention de la connexion peut être trouvée aquí . Quelqu'un peut-il expliquer pourquoi les deux options sont liées ?