Джанго фоновая тема - PullRequest
       20

Джанго фоновая тема

0 голосов
/ 10 ноября 2018

Я делаю приложение для Django. он должен выполнять фоновую работу (взаимодействуя с внешними API) во время работы сервера, поэтому мне кажется, что мне нужно запустить отдельный поток, независимый от всех внешних запросов. Как лучше всего это сделать?

Моим первым инстинктом было просто import threading и запустить другой поток, но где мне разместить этот код в приложении Django? это даже правильный подход? мне нужно сделать скрипт внешнего сервиса, который связывается с приложением?

Мой поиск в Google привел меня только к таким вещам, как django-background-tasks и celery, хотя, насколько я понимаю, эти решения предназначены только для задач в представлениях, которые занимают много времени, для возврата веб-страницы до ее фактического выполнения. эти решения имеют поддержку фоновых потоков? Я не хочу запускать функцию каждый раз, я хочу, чтобы она работала вечно с момента запуска Django.

Я хочу, чтобы он был предпочтительно автономным внутри приложения, поэтому было бы идеальным решение без сценария внешнего сервиса. Я хочу, чтобы приложение можно было установить через pip.

1 Ответ

0 голосов
/ 10 ноября 2018

Если вы планируете использовать сельдерей, вы можете использовать celery beat, чтобы периодически запускать задачу, не вызывая ее из вида. django-celery-beat позволяет управлять расписанием через django-admin. Вам все еще нужно запустить планировщик ритмов и сельдерея как отдельные процессы.

Однако реализация вашей задачи с использованием сельдерея может усложнить процесс установки для пользователей, устанавливающих ваше приложение через pip, поскольку им также необходимо правильно настроить сельдерей.

Более простой подход к решению этой проблемы заключается в реализации задачи в виде команды управления django , которую вы затем запускаете из командной строки и можете запланировать ее выполнение как обычный cronjob. Вашим пользователям все равно придется напоминать о настройке cronjob после установки вашего пакета.

...