8. А ЕЩЕ ГЛУБЖЕ?
• epoll, kqueue, greenlets
• Пайпы, сокеты
• Зависит от платформы и опций
9. БЭКЕНДЫ РАЗНЫЕ ВАЖНЫ
Name Status Monitoring Remote
Control
RabbitMQ Stable Yes Yes
Redis Stable Yes Yes
Mongo
DB Experimental Yes Yes
Beanstalk Experimental No No
Amazon
SQS Experimental No No
Couch
DB Experimental No No
Zookeeper Experimental No No
Django
DB Experimental No No
SQLAlchemy Experimental No No
Iron
MQ 3rd
party No No
19. МАРШРУТИЗАЦИЯ И ПРИОРИТЕЗАЦИЯ
• На каждый тип задач– своя очередь
• Для каждой очереди – свой пул воркеров
• Для приоритета – отдельные очереди
UI
Cron
Sync
20. ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЯ
def make_task_wrapper(f):
@celery.task(**task_kwargs)
@wraps(f)
def wrapper(self, *args, **kwargs):
try:
return f(*args, **kwargs)
except TaskRetry as e:
if not e.max_retries:
self.request.retries -= 1
raise self.retry(countdown=e.countdown, max_retries=e.max_retries)
except SystemExit:
if idempotent:
self.request.retries -= 1
raise self.retry(countdown=0, max_retries=None)
else:
logger.exception(message, self.name)
except Exception:
...