rq (Redis Queue) - еще один вариант для асинхронных операций (кроме тех, которые Максим Лорант упоминает в своем ответе). Он использует Redis в качестве брокера (средний человек, который выполняет задачи), поэтому, если вы уже используете Redis или хотите добавить его в свой проект, вы должны его рассмотреть. Это приятное и простое решение, намного проще, чем сельдерей. Существует также django-rq простое приложение, которое обеспечивает интеграцию django для rq.
Update: Итоговые комментарии
django_rq предоставляет команды управления (rqworker), который запускает рабочий процесс. Любое задание, которое помещается в очередь, будет выполняться этим процессом. Вы можете отправить одно задание в очередь для каждого объекта (задание будет функцией с объектом в его аргументах, и оно сохранит объект в базе данных) или соберите список объектов и отправьте задание с этим списком. Во втором случае вам нужно временно хранить этот список где-нибудь, что может быть сложно.
Использование Redis для временного хранения объектов (рекомендуется)
Я думаю, что самый надежный способ сделать это, чтобы сериализовать объекты JSON и хранить их в список Redis. Затем регулярно проверяйте длину и длину требуемой длины, вы можете отправить задание в очередь, имеющую этот список в своих аргументах.
Использование памяти работника для временного хранения объектов
Вы также можете использовать оперативную память вашего работника в качестве временного хранилища. Это можно сделать, поскольку рабочий процесс имеет свою собственную память. В этом случае основной процесс (рабочий сервер) создает задание с объектом. Задание не сохраняет объект, оно просто добавляет его в список.Вы можете сохранить добавление объектов в этот список. Поскольку задания выполняются в рабочем процессе, этот список существует в памяти рабочего. Когда он имеет желаемую длину, вы можете сохранить все объекты.
Но представьте себе случай, когда вы создаете более одного рабочего. В этом случае каждое задание в очереди будет выбрано текущим свободным работником. Таким образом, некоторые объекты будут добавлены в список в памяти рабочего_1, некоторые другие объекты в списке worker_2 и т. Д., И вам придется иметь дело с таким количеством списков, что и рабочие.
Сравнение сельдерея с django - сравнение яблок и апельсинов. Django предназначен для обеспечения того, чтобы все данные были сохранены должным образом или чтобы исключить исключение, если это невозможно. Вы эссенциально превращаете джанго в его голову. Однако вы все равно можете передать эту работу сельдерею и покончить с этим. – e4c5
Дело в том, что мне нужно записать некоторые данные для каждого посещения в этом представлении, и я не хочу, чтобы он был медленным из-за этой вставки. Сельдерей просто кажется слишком сложным со слишком большим количеством зависимостей для такой простой задачи. – user3599803