87 votes

Files d'attente de tâches distribuées (Ex. Celery) vs scripts crontab

J'ai du mal à comprendre le but des "files d'attente de tâches distribuées". Par exemple, le programme python bibliothèque de céleri .

Je sais que dans celery, le framework python, vous pouvez définir des fenêtres temporelles pour l'exécution des fonctions. Cependant, cela peut aussi être fait facilement dans une crontab linux dirigée vers un script python.

Et pour autant que je sache, et d'après mes propres applications web django-celery, celery consomme beaucoup plus de mémoire RAM que la simple mise en place d'une crontab brute. Quelques centaines de Mo de différence pour une application relativement petite.

Quelqu'un peut-il m'aider à faire cette distinction ? Une explication de haut niveau sur le fonctionnement des files d'attente de tâches et des crontabs en général serait également la bienvenue.

Merci.

126voto

Josh Smeaton Points 18165

Cela dépend de ce que vous voulez que vos tâches fassent, si vous devez les distribuer et comment vous voulez les gérer.

Une crontab est capable d'exécuter un script tous les N intervalles. Il s'exécute, puis revient. Essentiellement, vous obtenez une seule exécution par intervalle. Vous pourriez simplement diriger un crontab pour exécuter une commande de gestion de django et avoir accès à l'ensemble de l'environnement django, donc celery ne vous aide pas vraiment là.

Ce que celery apporte à la table, avec l'aide d'une file de messages, ce sont des tâches distribuées. De nombreux serveurs peuvent rejoindre le pool de travailleurs et recevoir chacun un élément de travail sans craindre une double manipulation. Il est également possible d'exécuter une tâche dès qu'elle est prête. Avec cron, vous êtes limité à un minimum d'une minute.

Par exemple, imaginez que vous venez de lancer une nouvelle application Web et que vous recevez des centaines d'inscriptions qui nécessitent l'envoi d'un courriel à chaque utilisateur. L'envoi d'un e-mail peut prendre beaucoup de temps (comparativement), vous décidez donc de gérer les e-mails d'activation par le biais de tâches.

Si vous utilisiez cron, vous devriez faire en sorte que cron puisse traiter chaque minute tous les courriels qui doivent être envoyés. Si vous avez plusieurs serveurs, vous devez maintenant vous assurer que vous n'envoyez pas plusieurs courriels d'activation au même utilisateur - vous avez besoin d'une sorte de synchronisation.

Avec celery, vous ajoutez une tâche à la file d'attente. Vous avez peut-être plusieurs travailleurs par serveur, ce qui vous permet d'anticiper la mise en place d'un cronjob. Vous pouvez également avoir plusieurs serveurs, ce qui vous permet d'aller encore plus loin. La synchronisation est gérée comme une partie de la 'queue'.

Vous peut utiliser celery pour remplacer cron mais ce n'est pas vraiment son utilisation principale. Il est utilisé pour la gestion de tâches asynchrones sur un cluster distribué.

Et bien sûr, le céleri a un grande liste de fonctionnalités que le cron ne fait pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X