Dramatiq comme alternative moderne à Celery : plus de problèmes avec les versions et le support de Windows

Nous rencontrons beaucoup de tâches asynchrones dans le développement Web. Lorsque nous avons besoin d'opérations telles que :





  • Envoyer des emails





  • Envoi de requêtes à des API externes





  • Opérations mathématiques longues





  • Requêtes de base de données complexes





Notre application perd du temps à les exécuter et fait attendre l'utilisateur, ce qui peut affecter négativement son expérience utilisateur. Des files d'attente de tâches asynchrones existent pour résoudre ce problème.





Le céleri et ses problèmes

Le plus populaire pour le langage de programmation Python a longtemps été Celery . Il offre de grandes opportunités pour travailler avec des tâches, les lancer avec une période spécifique et les affiner.





Jusqu'à la sortie de Python 3.7, c'était presque le seul moyen d'implémenter le traitement des tâches asynchrones. Mais il est malheureusement aussi connu pour ses problèmes de compatibilité avec Python 3.7 et supérieur et le manque de support de Windows depuis Celery 4.





Et donc, pour tester votre application, il faut déployer Celery dans Docker ou passer sous Linux, ce qui est indésirable pour beaucoup.





Solution moderne - Dramatiq

Après avoir cherché des informations, j'ai trouvé une excellente alternative au céleri.





Dramatiq - Python 3, 2017 Celery.





If you’ve ever had to use Celery in anger, Dramatiq could be the tool for you.





- Celery, , Dramatiq .





Dramatiq . Dramatiq?

















  • Redis RabbitMQ





  • ,





, Dramatiq . :





 





Dramatiq





Celery





RQ





Python 2

















Windows

















































































RabitMQ

















Redis

















Dramatiq

, Dramatiq !





, -, titles.txt. titles_scraper.py :





import requests
from bs4 import BeautifulSoup 


def get_page_title(url):   
    soup = BeautifulSoup(requests.get(url).text, "html.parser")   
    file = open("titles.txt", "a")   
    file.write("\n"+soup.title.text)
      
      



get_page_title("example.com")



, , . , Dramatiq.





, :





import requests
from bs4 import BeautifulSoup 
from dramatiq.brokers.redis import RedisBroker 
import dramatiq


#    Redis  
dramatiq.set_broker(RedisBroker())

@dramatiq.actor
def get_page_title(url):   
    soup = BeautifulSoup(requests.get(url).text, "html.parser")   
	  file = open("titles.txt", "a")   
	  file.write("\n"+soup.title.text)
      
      



, , Dramatiq. Dramatiq , , .





:





dramatiq titles_scraper
      
      



Python :





>>> from titles_scraper import get_page_title
>>> get_page_title("https://google.com/") #     
>>> get_page_title.send("https://google.com") #   , 
>>> # Dramatiq    
      
      



, titles.txt, google.com.





, Dramatiq, . , Dramatiq.





-

Django Flask:





  • Django, django-dramatiq. .





  • Flask, flask-dramatiq.





, Dramatiq .





  • Dramatiq





  • Ouvrir le dépôt Dramatiq





  • Entretien en anglais avec le créateur de Dramatiq








All Articles