Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 27, 2013 15:05:09

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Celery. Как работать с базой?

Решил ознакомиться с данным фреймворком. Хочу сделать много task-ов, результат каждого должен записываться в базу. Как это сделать? В каждом task-е открывать коннект к базе? Так нельзя. Создать коннект и параметром передавать его в task? Мне кажется так не получится. Подскажите.



Офлайн

#2 Авг. 27, 2013 16:03:26

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Celery. Как работать с базой?

Что должна делать система при нестандартной ситуации?
Например, что будет если задание выполнится, но результат не сможет быть сохранен?
Если нужна атомарность - задание считается выполненным, когда результат его выполнения записан в базу,- тогда воркер должен ставить признак выполнения задания только после записи (в этой части должен работать синхронно). Этот вариант чуть лучше одного соединения с БД, но все равно остается узким местом системы.

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

Это только для примера, навскидку.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version