Как запустить некоторый код 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/

Вернуться на верх