[Open source, Python] Dramatiq как современная альтернатива Celery: больше нет проблем с версиями и поддержкой Windows
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Мы часто сталкиваемся с асинхронными задачами в веб-разработке. Когда нам нужны такие операции как:
- Отправка электронных писем
- Отправка запросов к внешним API
- Долгие математические операции
- Сложные запросы к базе данных
Наше приложение тратит время на их выполнение и заставляет пользователя ждать, что может негативно сказаться на его пользовательском опыте. Для решения этой проблемы существуют асинхронные очереди выполнения задач. Celery и его проблемыСамой популярной для языка программирования Python давно является Celery. Она предоставляет большие возможности работы с задачами, запуске их с определенным периодом и тонкой настройки. До выхода Python 3.7 она была чуть ли не единственным способом реализовать асинхронную обработку задач. Но она, к сожалению, также известна своими проблемами с совместимостью с Python 3.7 и выше и отсутствием поддержки Windows с версии Celery 4. И поэтому для тестирования своего приложения приходится разворачивать Сelery в Docker или переходить на Linux, что для многих является нежелательным.Современное решение - DramatiqПоискав информацию я обнаружил прекрасную альтернативу Celery. 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 вам точно понравится. Ниже я приведу сравнительную таблицу актуальных решений в этой сфере: DramatiqCeleryRQПоддержка 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
- Открытый репозиторий Dramatiq
- Интервью на английском с создателем Dramatiq
===========
Источник:
habr.com
===========
Похожие новости:
- [Open source, API, Dart, Flutter] Как перестать писать код для взаимодействия с бэкендом
- [Open source, Программирование, Учебный процесс в IT] Как я учил студентов Северной Кореи разрабатывать ПО с открытым исходным кодом (перевод)
- [Open source, C++, Qt, Софт] Haiku, Inc. проспонсировала приобретение RISC-V материнских плат для портирования системы Haiku
- [Open source, Системы сборки, DevOps, Kubernetes] werf vs Docker. Чем лучше собирать образы
- [Python, API] Сохраняем комментарии youtube в csv
- [Open source, Разработка игр, HTML, Дизайн игр, DIY или Сделай сам] Что случилось с игрой «Колобок» в июне
- [Python, Машинное обучение] Эволюция OLEG AI. Нейросеть, утечки памяти, нагрузка
- [Python, Алгоритмы, Big Data, Машинное обучение, Искусственный интеллект] Data Phoenix Digest — 01.07.2021
- [Python, Алгоритмы, Big Data, Машинное обучение, Искусственный интеллект] Data Phoenix Digest — 01.07.2021
- [Настройка Linux, Open source, Виртуализация, Kubernetes] 13 инструментов для разработчиков, шпаргалка по Linux команде apt, вводный курс по Kubernetes Operators и многое другое
Теги для поиска: #_open_source, #_python, #_dramatiq, #_python, #_asinhronnost (асинхронность), #_ochered_zadach (очередь задач), #_celery, #_opensorts (опенсорц), #_open_source, #_python
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 05:38
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Мы часто сталкиваемся с асинхронными задачами в веб-разработке. Когда нам нужны такие операции как:
If you’ve ever had to use Celery in anger, Dramatiq could be the tool for you. Если вам когда-либо приходилось использовать Celery, испытывая гнев, то Dramatiq может быть инструментом для вас.
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) 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 titles_scraper
>>> from titles_scraper import get_page_title
>>> get_page_title("https://google.com/") # Вам придется ждать около секунды >>> get_page_title.send("https://google.com") # Код выполнится мгновенно, >>> # Dramatiq сам занялся выполнением кода
=========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 05:38
Часовой пояс: UTC + 5