Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Attribuer une tâche à un Worker Celery en particulier

+3 votes

Comment attribuer une tâche à un Worker Celery en particulier ?
Dans mon projet j'ai besoin d'exécuter une tâche X sur un des serveurs distant.
Comment je fais dans mon code pour spécifier à Celery chaque fois et à tout moment le Worker que je veux utilisé pour une tâche ?

Voici un exemple :

@shared_task
def get_uptime():
    return os.system("uptime")

Je veux voir l'uptime du worker B mais seulement B, pas A, ni C..etc mais juste B.
Pour l'instant je ne vois pas comment le faire et les routing ne sont pas ce que je cherche vu que c'est de la config fixe, peut être que je me goure de solution, peut être que Celery n'est pas le meilleur moyen de faire ça ? Je dois utiliser directement RabbitMQ/Redis ?

demandé 4-Fev-2015 par Med (158 points)
edité 6-Fev-2015 par foxmask

1 Réponse

+2 votes

Tu crées une queue "uptime", et tu l'assigne à un worker uniquement (http://celery.readthedocs.org/en/latest/userguide/workers.html#queues. Ensuite tu envoies ta tache sur la queue désirée (http://celery.readthedocs.org/en/latest/userguide/routing.html#manual-routing).

Néanmoins si tu veux faire un truc qui monitore, à mon avis, crossbar.io est plus adapté. Je vais faire un article d'exemple aujourd'hui je pense.

répondu 5-Fev-2015 par Sam (4,984 points)

Donc Celery n'est définitivement pas ce que je cherche dommage, à la base je voulais utiliser Autobahn de toute façon mais c'est un projet Django et je suis pas sur que Crossbar soit aussi sécurisé que Redis/RabbitMQ.
En tout les cas j'attend ton article :-)
EDIT : l'idéal pour moi aurait été un truc : uptime.delay(destination=worker@server1.com) mais ça n'existe pas.

+1 pour l'attente de l'article ;)

...