2013-04-26 3 views
67

Je n'arrive pas à comprendre le but des 'files d'attente de tâches distribuées'. Par exemple, celery library de python.Files d'attente de tâches réparties (Ex. Celery) vs scripts crontab

Je sais que dans celery, le framework python, vous pouvez définir des fenêtres temporisées pour les fonctions à exécuter. Cependant, cela peut également être facilement fait dans un crontab Linux dirigé vers un script python. Et pour autant que je sache, et comme je le sais, et montré à partir de mes propres webapps django-céleri, le céleri consomme beaucoup plus de mémoire vive que la simple configuration d'une crontab brute. Une différence de quelques centaines de Mo pour une application relativement petite.

Est-ce que quelqu'un peut m'aider avec cette distinction? Peut-être une explication de haut niveau sur le fonctionnement des files d'attente de tâches/crontabs en général serait bien aussi.

Merci.

Répondre

100

Cela dépend de ce que vous voulez faire de vos tâches, si vous avez besoin de les distribuer, et comment vous voulez les gérer. Un 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 chaque intervalle. Vous pouvez simplement diriger une crontab pour exécuter une commande de gestion de django et avoir accès à l'ensemble de l'environnement django, de sorte que le céleri ne vous aide pas vraiment là-bas.

Ce que le céleri apporte à la table, à l'aide d'une file d'attente de messages, est distribué tâches. De nombreux serveurs peuvent rejoindre le pool de travailleurs et recevoir chacun un élément de travail sans crainte de 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 nécessitant l'envoi d'un e-mail à chaque utilisateur. L'envoi d'un e-mail peut prendre beaucoup de temps (en comparaison). Vous décidez donc de gérer les e-mails d'activation via des tâches.

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

Avec céleri, vous ajoutez une tâche à la file d'attente. Vous pouvez avoir plusieurs travailleurs par serveur, donc vous avez déjà dépassé un cronjob. Vous pouvez également avoir plusieurs serveurs vous permettant d'évoluer encore plus. La synchronisation est gérée dans le cadre de la 'file d'attente'.

pouvez utiliser le céleri comme remplacement de cron mais ce n'est pas vraiment son utilisation principale. Il est utilisé pour l'exécution de tâches asynchrones sur un cluster distribué.

Et bien sûr, le céleri a un big list of features que cron ne fait pas.

Questions connexes