Python: приоритезация задач и запуск асинхронных задач без блокировки

Прямо сейчас я использую Gevent, и я хотел задать два вопроса:

  • Есть ли способ выполнить определенные задачи, которые никогда не будут выполняться асинхронно (вместо использования блокировки в каждой из этих задач)
  • Есть ли способ расставить приоритеты в Gevent? Как группа задач, которые будут сгенерированы с низким приоритетом, которые будут выполнены, когда все другие задачи будут выполнены. Например, две задачи, которые прослушивают разные сокеты, когда каждая из этих задач обрабатывает запросы сокетов с различным приоритетом.

Если это невозможно в Gevent, есть ли другая библиотека, которую можно сделать?

редактировать
Может быть, сельдерей может помочь мне здесь?

1 ответ

Если вы хотите управлять вычислительными ресурсами, асинхронные библиотеки Python здесь не могут помочь, потому что, AFAIK, ни один не имеет планировщика приоритетов. Все зеленые нити равны.

Очереди задач обычно имеют понятие приоритета, поэтому Celery или Beanstalk - это один из способов сделать это.

Если ваша проблема не требует гарантий выполнения (пере) выполнения, постоянства, распределения работы на нескольких машинах, то я просто запустил бы несколько рабочих процессов, назначил бы им ЦП, IO, дисковые приоритеты с помощью ОС и отправил работу / результаты через DGRAM сокета UNIX. Вид специальной упрощенной версии очереди задач. Если вы идете по этому пути, пожалуйста, поделитесь своей работой как проект с открытым исходным кодом, я считаю, что есть спрос на такого рода решения.

Другие вопросы по тегам