Dramatiq como alternativa moderna al apio: no más problemas con las versiones y el soporte de Windows

Nos encontramos con muchas tareas asincrónicas en el desarrollo web. Cuando necesitamos operaciones como:





  • Mandando correos electrónicos





  • Envío de solicitudes a API externas





  • Operaciones matemáticas largas





  • Consultas complejas de bases de datos





Nuestra aplicación pierde tiempo ejecutándolos y hace esperar al usuario, lo que puede afectar negativamente su experiencia de usuario. Existen colas de tareas asincrónicas para resolver este problema.





Apio y sus problemas

El más popular para el lenguaje de programación Python ha sido durante mucho tiempo Celery . Brinda grandes oportunidades para trabajar con tareas, lanzarlas con un período específico y perfeccionarlas.





Hasta que se lanzó Python 3.7, era casi la única forma de implementar el procesamiento de tareas asincrónicas. Pero, desafortunadamente, también es conocido por sus problemas de compatibilidad con Python 3.7 y superior y la falta de soporte de Windows desde Celery 4.





Y, por lo tanto, para probar su aplicación, debe implementar Celery en Docker o cambiar a Linux, lo cual es indeseable para muchos.





Solución moderna - Dramatiq

Después de buscar información, encontré una excelente alternativa al apio.





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





  • Abrir repositorio Dramatiq





  • Entrevista en inglés al creador de Dramatiq








All Articles