2017-07-25 3 views
1

J'ai un projet avec beaucoup de tâches Céleri, et l'une des tâches doit être exécutée seulement une à la fois (c'est une demande à une API tierce qui interdit plusieurs concurrents les liaisons).céleri - définir un nombre différent de travailleurs pour différentes files d'attente

je peux réaliser cela en lançant un processus de céleri séparé avec une file d'attente séparée et une simultanéité de 1.

processus de céleri normal:

celery -A sourcery worker -Q default -c 4 

Un seul processus de travail distinct:

celery -A sourcery worker -Q separate_queue -c 1 

Mais je suis sur Heroku, et je serai doublement facturé pour deux processus au lieu d'un. Alors, y a-t-il un moyen d'y parvenir avec un seul processus de céleri?

+0

implémenter à la couche de l'application, avec un sémaphore, est beaucoup plus simple pour moi. – georgexsh

Répondre

0

Il n'existe actuellement aucun moyen de le faire.

J'ai eu un problème similaire où j'avais une API tierce qui permettait seulement une connexion simultanée. J'ai fini par courir deux dynos séparés sur Heroku.

Quelqu'un a fait la demande de cette fonction, mais il n'a pas été mis en œuvre: https://github.com/celery/celery/issues/1599

Edit:

Il y a quelque chose appelé le céleri multi qui pourrait être utile dans la recherche:

Celery - run different workers on one server

Je ne suis pas sûr que ce soit compatible Heroku, laissez-moi savoir si vous essayez!