Size: a a a

Django [ru] #STAY HOME

2020 August 22

DB

Dima Boger in Django [ru] #STAY HOME
Dima Boger
фишка групп в том, что они обёрнуты в магическую джобу, которая собирает результат всех тасок в группе

поэтому если надо не просто выполнить 100 задач, но и потом посмотреть результат этих 100 задач, то это очень удобная абстракция
а ещё из других абстракций канваса можно собрать адски удобный пайплайн:
chain([
  prepare_data.s(),
  group([
     ...
  ]),
  process_result.s(),
]).delay()
источник

DB

Dima Boger in Django [ru] #STAY HOME
Mikhail Zanozin
Не совсем. Я про https://docs.celeryproject.org/en/stable/reference/celery.html#celery.Celery.send_task

Я всегда на практике запускают воркеры в другом пространстве и на нескольких хостах, поэтому в приложении, как правило, кода нет - он лежит под воркерами. Я так и не понял, плохо это или нет.
а, понял о чём ты

ну в небольших приложениях проще хранить всё рядом, потому что логика между приложением и фоновыми тасками шаренная (общие модели, общие куски бизнес-логики, етс)
источник

DB

Dima Boger in Django [ru] #STAY HOME
но даже если кидать в очередь по имени — остаётся вопрос как потом собрать результат 🤔

Всё равно захочется сделать сначала группу из task_name, а потом результат этого выполнения получить
источник

𝕬

𝕬𝕲𝖗𝖚𝖘 🥭... in Django [ru] #STAY HOME
tot samiy neizvestniy
Например, метод update переписать в сериалайзере
Это понятно, но все равно запрашивает все поля модели, когда требуется лишь одно.
источник

MZ

Mikhail Zanozin in Django [ru] #STAY HOME
Dima Boger
но даже если кидать в очередь по имени — остаётся вопрос как потом собрать результат 🤔

Всё равно захочется сделать сначала группу из task_name, а потом результат этого выполнения получить
А вроде нет речи, что результат нужен на месте. Воркер имеет информацию о бэкенде, куда может опционально писать результат.
источник

DB

Dima Boger in Django [ru] #STAY HOME
𝕬𝕲𝖗𝖚𝖘 🥭
Это понятно, но все равно запрашивает все поля модели, когда требуется лишь одно.
переопределить get_queryset на использование с only
источник

DB

Dima Boger in Django [ru] #STAY HOME
Вообще можно подхачить и использовать чистый .save(update_fields=[...]) 🤔

не уверен что это много сэкономит
источник

tn

tot samiy neizvestni... in Django [ru] #STAY HOME
Есть веб-сервис на Python 3.7.
Флоу следующее:
1. Пользователь может загружать файлы (xls/csv) либо давать урл на гугл таблицу.
2. В таблице может быть неограниченное число строк - до 80к, например.
3. В каждой строке хранятся данные. Из каждой строки создаётся новая запись в базе данных (postgresql)
4. Каждая запись при сохранении индексируется в ElasticSearch.
5. Перед сохранением записи в бд нужно циклом пройти по каждой строке, чтобы привести данные в нужный формат.

Много времени уходит на саму обработку данных, чтобы привести их к нужному формату. Ну и делать 80к итераций это тоже зашквар ещё тот.

Всё это дело я вынес в celery.
Как можно оптимизировать? Потоки? Мультипроцессы? Селери чанки?
источник

AF

Anton Fircak in Django [ru] #STAY HOME
tot samiy neizvestniy
Есть веб-сервис на Python 3.7.
Флоу следующее:
1. Пользователь может загружать файлы (xls/csv) либо давать урл на гугл таблицу.
2. В таблице может быть неограниченное число строк - до 80к, например.
3. В каждой строке хранятся данные. Из каждой строки создаётся новая запись в базе данных (postgresql)
4. Каждая запись при сохранении индексируется в ElasticSearch.
5. Перед сохранением записи в бд нужно циклом пройти по каждой строке, чтобы привести данные в нужный формат.

Много времени уходит на саму обработку данных, чтобы привести их к нужному формату. Ну и делать 80к итераций это тоже зашквар ещё тот.

Всё это дело я вынес в celery.
Как можно оптимизировать? Потоки? Мультипроцессы? Селери чанки?
мб пандасы всякие для обработки таблицы? А так наверное на асинхронщину переписывай
источник

tn

tot samiy neizvestni... in Django [ru] #STAY HOME
Не думаю, что пандас тут особо поможет. Нужно как-то разбивать и параллелить, но хз как.
источник

MZ

Mikhail Zanozin in Django [ru] #STAY HOME
Пользователь должен видеть результат/прогресс выполнения в реалтайме или вообще?

У меня много таких задач - всякий раз "велосипеды".
источник

tn

tot samiy neizvestni... in Django [ru] #STAY HOME
Mikhail Zanozin
Пользователь должен видеть результат/прогресс выполнения в реалтайме или вообще?

У меня много таких задач - всякий раз "велосипеды".
Вообще не важно
источник

ZD

Zhan Dosov in Django [ru] #STAY HOME
Привет, есть тут python Junior программисты с города Астана?
источник

AF

Anton Fircak in Django [ru] #STAY HOME
ребят, а как переопределить удаление с админки сущности? def delete_model(self, request, object): чет не вызывается при удалении
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Anton Fircak
ребят, а как переопределить удаление с админки сущности? def delete_model(self, request, object): чет не вызывается при удалении
кастомный Queryset по умолчанию, в нем переопределить .delete()
источник

AF

Anton Fircak in Django [ru] #STAY HOME
Artem Gubatenko
кастомный Queryset по умолчанию, в нем переопределить .delete()
а в модели, хмм спасибо
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
tot samiy neizvestniy
Есть веб-сервис на Python 3.7.
Флоу следующее:
1. Пользователь может загружать файлы (xls/csv) либо давать урл на гугл таблицу.
2. В таблице может быть неограниченное число строк - до 80к, например.
3. В каждой строке хранятся данные. Из каждой строки создаётся новая запись в базе данных (postgresql)
4. Каждая запись при сохранении индексируется в ElasticSearch.
5. Перед сохранением записи в бд нужно циклом пройти по каждой строке, чтобы привести данные в нужный формат.

Много времени уходит на саму обработку данных, чтобы привести их к нужному формату. Ну и делать 80к итераций это тоже зашквар ещё тот.

Всё это дело я вынес в celery.
Как можно оптимизировать? Потоки? Мультипроцессы? Селери чанки?
> Много времени уходит на саму обработку данных, чтобы привести их к нужному формату.

Мультипроцессы - должны помочь
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
+ действительно обрабатывать данные какой-то специальной библиотекой, написанной на Си
источник

tn

tot samiy neizvestni... in Django [ru] #STAY HOME
Artem Gubatenko
+ действительно обрабатывать данные какой-то специальной библиотекой, написанной на Си
Сложна
источник

DB

Dima Boger in Django [ru] #STAY HOME
tot samiy neizvestniy
Есть веб-сервис на Python 3.7.
Флоу следующее:
1. Пользователь может загружать файлы (xls/csv) либо давать урл на гугл таблицу.
2. В таблице может быть неограниченное число строк - до 80к, например.
3. В каждой строке хранятся данные. Из каждой строки создаётся новая запись в базе данных (postgresql)
4. Каждая запись при сохранении индексируется в ElasticSearch.
5. Перед сохранением записи в бд нужно циклом пройти по каждой строке, чтобы привести данные в нужный формат.

Много времени уходит на саму обработку данных, чтобы привести их к нужному формату. Ну и делать 80к итераций это тоже зашквар ещё тот.

Всё это дело я вынес в celery.
Как можно оптимизировать? Потоки? Мультипроцессы? Селери чанки?
А не вынести преобразование на сторону базы? 😈
источник