Потоки в Django с threading
У меня есть необходимость запускать поток (далее планирую использовать его как мини-версию крона) при запуске приложения на джанго.
Дело в том, что если я запускаю поток через th.start()
то приложение джанго запускает его дважды, что мне не подходит, как и запускать его отдельным приложением. Попробовал дать имя потоку и с помощью threading.enumerate()
отследить его так:
def schedule ():
import time
while True:
time.sleep (5)
print ('Демон работает')
th = threading.Thread (target=schedule, daemon=True, name='schedule')
daemon = False
for name in threading.enumerate():
print (name.getName()) # Смотрю какие имена вообще есть
if name.getName() == 'schedule':
daemon = True
break
if daemon == True:
print('Демон еще жив')
else:
print('Демон запущен')
th.start()
В моем представлении это должно было сработать, но threading.enumerate()
ничего кроме MainThread не видит и условие ниже запускает его дубль. Что я вижу в терминале:
python3 manage.py runserver
MainThread
Демон запущен
MainThread
Демон запущен
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
June 15, 2023 - 11:04:48
Django version 2.2.28, using settings 'temp_project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Демон работает
Демон работает
Демон работает
Демон работает
Мне кажется, что приложение джанго запускает при старте поток и убивает его, а потом начинает новый (уже рабочий) из-за чего мое условие не работает. Я видел несколько тем по этому вопросу, но ответы на них в основном "увы и ах", может быть у кого-нибудь найдутся соображения как это реализовать?
Крайним выходом из сложившейся ситуации вижу помещение моего кода в одну из функций, которую можно будет вызвать GET/POST запросом к приложению, но хотелось бы минимизировать участие человека в этом вопросе.