web-dev-qa-db-fra.com

Avantages et inconvénients d'utiliser Celery vs RQ

Actuellement, je travaille sur python qui nécessite de mettre en œuvre des tâches d'arrière-plan (principalement pour l'envoi d'e-mails et des mises à jour de bases de données importantes). J'utilise Redis pour le courtier de tâches. Donc, à ce stade, j'ai deux candidats: Céleri et RQ . J'avais une certaine expérience avec ces files d'attente, mais je veux vous demander de partager votre expérience d'utilisation ces outils.

  1. Quels avantages et inconvénients d'utiliser Celery vs RQ.
  2. Tous les exemples de projets/tâches appropriés pour utiliser Céleri contre RQ.

Le céleri a l'air assez compliqué, mais c'est une solution complète. En fait, je ne pense pas avoir besoin de toutes ces fonctionnalités. D'un autre côté, RQ est très simple (par exemple, configuration, intégration), mais il semble qu'il manque certaines fonctionnalités utiles (par exemple, révocation de tâche, rechargement automatique de code)

82
Max Kamenkov

Voici ce que j'ai trouvé en essayant de répondre exactement à cette même question. Il n'est probablement pas exhaustif et peut même être inexact sur certains points.

En bref, RQ est conçu pour être plus simple tout autour. Le céleri est conçu pour être plus robuste. Ils sont tous les deux excellents.

  • Documentation. La documentation de RQ est complète sans être complexe, et reflète la simplicité globale du projet - vous ne vous sentez jamais perdu ou confus. La documentation de Celery est également complète, mais attendez-vous à la revoir beaucoup lorsque vous configurez les choses pour la première fois car il y a trop d'options pour internaliser
  • Surveillance. Fleur de céleri et le tableau de bord RQ sont tous deux très simples à configurer et vous donnent au moins 90% de toutes les informations que vous souhaitez

  • Assistance aux courtiers. Le céleri est clairement le gagnant, RQ ne prend en charge que Redis. Cela signifie moins de documentation sur "ce qu'est un courtier", mais signifie également que vous ne pourrez pas changer de courtier à l'avenir si Redis ne fonctionne plus pour vous. Par exemple, Instagram considérait à la fois Redis et RabbitMQ avec Celery . Ceci est important car différents courtiers ont des garanties différentes, par exemple Redis ne peut pas (au moment de la rédaction) garantir à 100% que vos messages sont livrés.

  • Files d'attente prioritaires. Le modèle de file d'attente prioritaire des RQ est simple et efficace - les travailleurs lisent les files d'attente dans l'ordre . Le céleri nécessite la rotation de plusieurs employés pour consommer à partir de différentes files d'attente. Les deux approches fonctionnent

  • Prise en charge du système d'exploitation. Le céleri est clairement le gagnant ici, car RQ ne fonctionne que sur les systèmes qui prennent en charge fork par exemple Systèmes Unix

  • Support linguistique. RQ ne prend en charge que Python, tandis que Celery vous permet d'envoyer des tâches d'une langue vers une autre langue

  • API. Le céleri est extrêmement flexible (backends à résultats multiples, format de configuration Nice, prise en charge du canevas de workflow) mais naturellement, cette puissance peut être déroutante. En revanche, l'API RQ est simple.

  • Prise en charge des sous-tâches. Celery prend en charge les sous-tâches (par exemple, la création de nouvelles tâches à partir de tâches existantes). Je ne sais pas si RQ le fait

  • Communauté et stabilité. Le céleri est probablement plus établi, mais ce sont deux projets actifs. Au moment de l'écriture, Celery a ~ 3500 étoiles sur Github tandis que RQ a ~ 2000 et les deux projets montrent un développement actif

À mon avis, le céleri n'est pas aussi complexe que sa réputation pourrait vous le faire croire, mais vous devrez utiliser RTFM.

Alors, pourquoi quelqu'un serait-il disposé à échanger le céleri (sans doute plus complet) contre RQ? Dans mon esprit, tout se résume à la simplicité. En se limitant à Redis + Unix, RQ fournit une documentation plus simple, une base de code plus simple et une API plus simple. Cela signifie que vous (et les contributeurs potentiels à votre projet) pouvez vous concentrer sur le code qui vous intéresse, au lieu d'avoir à conserver des détails sur le système de file d'attente des tâches dans votre mémoire de travail. Nous avons tous une limite sur le nombre de détails pouvant être dans notre tête à la fois, et en supprimant la nécessité de conserver les détails de la file d'attente des tâches là-dedans, RQ permet de revenir au code qui vous intéresse. Cette simplicité se fait au détriment de fonctionnalités telles que les files d'attente de tâches inter-langues, une large prise en charge du système d'exploitation, des garanties de messages fiables à 100% et la possibilité de changer facilement de courtier de messages.

114
Hamy

Le céleri n'est pas si compliqué. À la base, vous effectuez la configuration étape par étape à partir de tutorials , créez une instance celery, décorez votre fonction avec @celery.task Puis exécutez le tâche avec my_task.delay(*args, **kwargs).

À en juger par votre propre évaluation, il semble que vous devez choisir entre des fonctionnalités (clés) manquantes ou un excès. Ce n'est pas trop difficile à choisir dans mon livre.

0
Jesse the Game