Как стать автором
Обновить

Комментарии 12

> асинхронные фреймворки вроде Торнадо или gevent

Или asyncio.
Но иногда этот вариант не подходит, потому что встроить event loop в уже существующий проект проблематично.
Не очень понятно а в чём проблема, речь про использование orm или что-то типа того? Ну, например, для вашего конкретного случая?

Вообще похожие задачи через celery делаю, интеграция с джангой теснее некуда.
Boto не асинхронный (правда можно подписывать запросы через url и отправлять чем угодно), orm не асинхронная.

Ставить для селери сразу сотни тысяч задач тоже не очень хорошая идея:
1) Большой оверхед для легких задач (как раз этот случай).
2) Появляются другие побочные эффекты. Когда я пробовал так делать у себя, редис разжирел из-за фрагментации памяти до 600 мб при реальных данных на 3мб.
Ну не знаю насчёт оверхеда даже… Имхо, надуманная проблема в случае когда альтернатива — тот или иной велосипед.
Задачи туда можно (порой нужно) через MQ пулять.
Почему нельзя использовать сервера очередей? RabbitMQ, gearmand и т. д.
Можно использовать сервера очередей, смотря какую цель преследовать.

Скорость работы в тех же условиях будет ниже хотя бы от того, что на выполнение будут отдаваться не объекты orm, а их id и нужно будет делать еще по запросы в базу для получения объектов. Но можно будет распараллелить на несколько процессов (что не очень интересно) или на несколько машин, что уже интереснее. Но я надеюсь что к тому времени как это понадобиться, мы уйдем от такого использования s3 в сторону чего-то более подходящего.
на выполнение будут отдаваться не объекты orm, а их id

А что мешает передавать в очередь объекты orm?
Ничего не мешает передавать объекты ORM в очередь кроме того, что к моменту выполнения задания объект уже может быть удалён или изменён. Хотя, в случае автора аналогичная проблема есть и в его реализации, только задержка между получением объекта из БД и его обработкой будет меньше.
Another gotcha is Django model objects. They shouldn’t be passed on as arguments to tasks. It’s almost always better to re-fetch the object from the database when the task is running instead, as using old data may lead to race conditions.
celery.readthedocs.org/en/latest/userguide/tasks.html#state
Спасибо за информацию о библиотеке futures.
Отлично, попробывал 14К файлов скачать, махом пришли…
Напрашивается вариант склеить файлы в один и отправить за один запрос.
Справедливости ради — Python это язык программирования, и интерпретаторов для него есть много, в т.ч. без GIL.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории