Как запустить некоторый код python в фоновом режиме
Я делаю сайт с помощью Django, и есть некоторый код, который я настроил на выполнение каждый час, однако когда я вызываю его как функцию в файле views.py, он не загружает веб-страницу, пока функция не завершится, что не идеально для моего сайта, я хочу, чтобы это был фоновый процесс, который происходит вне моего файла views.
Распространенным инструментом для обработки длительно выполняющихся заданий является celery: https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html
Традиционный подход, если вы используете какую-либо UNIX-подобную систему, заключается в написании управляющей команды, выполняющей то, что вам нравится делать, и запуске этой управляющей команды (с ./manage.py <your_custom_command>
) из cron.
Запустите его от какой-либо учетной записи, имеющей доступ к исходному коду и соответствующим таблицам базы данных. Не запускайте его от имени root. Если вы используете python virtualenv для вашего сайта, вам следует активировать его перед запуском manage.py.
Вы можете, например, запустить crontab -e
от имени этого пользователя и добавить запись типа
# m h dom mon dow command
# run your comand on every hour, minute 00
0 * * * * bash -c '. /your-site/env/bin/activate;/your-site/manage.py your_custom_command'
Пользовательские команды управления: https://docs.djangoproject.com/en/3.2/howto/custom-management-commands/