Найти - Пользователи
Полная версия: Celery. Как работать с базой?
Начало » Python для экспертов » Celery. Как работать с базой?
1
plusplus
Решил ознакомиться с данным фреймворком. Хочу сделать много task-ов, результат каждого должен записываться в базу. Как это сделать? В каждом task-е открывать коннект к базе? Так нельзя. Создать коннект и параметром передавать его в task? Мне кажется так не получится. Подскажите.
Lexander
Что должна делать система при нестандартной ситуации?
Например, что будет если задание выполнится, но результат не сможет быть сохранен?
Если нужна атомарность - задание считается выполненным, когда результат его выполнения записан в базу,- тогда воркер должен ставить признак выполнения задания только после записи (в этой части должен работать синхронно). Этот вариант чуть лучше одного соединения с БД, но все равно остается узким местом системы.

Есть разные варианты, выбор зависит от условий:
1. после выполнения задания воркер создает новое - запись результата, другой воркер его выполняет.
2. сделать отдельное приложение, которое обслуживает задания и имеет одно соединения с БД или пул соединений (зависит от интенсивности нагрузки), после выполнения основного задания его результат попадает в очередь этого приложения, приложение записывает в БД (это доп. задание к основному) и возвращает результат записи обратно воркеру основного задания.
3. выполненные задания сохраняются в промежуточном буфере и записываются в БД в пакетном режиме отдельным приложением.

Это только для примера, навскидку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB