Комментарии 12
Но иногда этот вариант не подходит, потому что встроить event loop в уже существующий проект проблематично.Не очень понятно а в чём проблема, речь про использование orm или что-то типа того? Ну, например, для вашего конкретного случая?
Вообще похожие задачи через celery делаю, интеграция с джангой теснее некуда.
0
Boto не асинхронный (правда можно подписывать запросы через url и отправлять чем угодно), orm не асинхронная.
Ставить для селери сразу сотни тысяч задач тоже не очень хорошая идея:
1) Большой оверхед для легких задач (как раз этот случай).
2) Появляются другие побочные эффекты. Когда я пробовал так делать у себя, редис разжирел из-за фрагментации памяти до 600 мб при реальных данных на 3мб.
Ставить для селери сразу сотни тысяч задач тоже не очень хорошая идея:
1) Большой оверхед для легких задач (как раз этот случай).
2) Появляются другие побочные эффекты. Когда я пробовал так делать у себя, редис разжирел из-за фрагментации памяти до 600 мб при реальных данных на 3мб.
0
Почему нельзя использовать сервера очередей? RabbitMQ, gearmand и т. д.
+1
Можно использовать сервера очередей, смотря какую цель преследовать.
Скорость работы в тех же условиях будет ниже хотя бы от того, что на выполнение будут отдаваться не объекты orm, а их id и нужно будет делать еще по запросы в базу для получения объектов. Но можно будет распараллелить на несколько процессов (что не очень интересно) или на несколько машин, что уже интереснее. Но я надеюсь что к тому времени как это понадобиться, мы уйдем от такого использования s3 в сторону чего-то более подходящего.
Скорость работы в тех же условиях будет ниже хотя бы от того, что на выполнение будут отдаваться не объекты orm, а их id и нужно будет делать еще по запросы в базу для получения объектов. Но можно будет распараллелить на несколько процессов (что не очень интересно) или на несколько машин, что уже интереснее. Но я надеюсь что к тому времени как это понадобиться, мы уйдем от такого использования s3 в сторону чего-то более подходящего.
0
на выполнение будут отдаваться не объекты orm, а их id
А что мешает передавать в очередь объекты orm?
0
Ничего не мешает передавать объекты 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
0
Спасибо за информацию о библиотеке futures.
Отлично, попробывал 14К файлов скачать, махом пришли…
Отлично, попробывал 14К файлов скачать, махом пришли…
+1
Напрашивается вариант склеить файлы в один и отправить за один запрос.
+1
Справедливости ради — Python это язык программирования, и интерпретаторов для него есть много, в т.ч. без GIL.
+2
Если есть много легаси-кода, то лёгким движением руки его можно перевести на асинхронный фреймворк.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Эффективная многопоточность в Python