Как правильно запустить бесконечные потоки, когда django запускается как fcgi?
Я хочу использовать pyinotify для просмотра изменений в файловой системе. Если файл изменился, я хочу соответствующим образом обновить файл моей базы данных (перечитать теги, другую информацию...)
Я поместил следующий код в signal.py моего приложения
import pyinotify
....
# create filesystem watcher in seperate thread
wm = pyinotify.WatchManager()
notifier = pyinotify.ThreadedNotifier(wm, ProcessInotifyEvent())
# notifier.setDaemon(True)
notifier.start()
mask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_MOVED_TO | pyinotify.IN_MOVED_FROM
dbgprint("Adding path to WatchManager:", settings.MUSIC_PATH)
wdd = wm.add_watch(settings.MUSIC_PATH, mask, rec=True, auto_add=True)
def connect_all():
"""
to be called from models.py
"""
rescan_start.connect(rescan_start_callback)
upload_done.connect(upload_done_callback)
....
Это прекрасно работает, когда django запускается с помощью ''./manage.py runserver ''. Тем не менее, при запуске от имени ''./manage.py runfcgi '' django не запускается. Нет сообщения об ошибке, оно просто зависает и не будет демонизироваться, вероятно, в строке ''notifier.start()''.
Когда я запускаю "./manage.py runfcgi method=threadaded" и включаю строку "notifier.setDaemon(True)", тогда поток уведомлений останавливается (isAlive() = False).
Как правильно запускать бесконечные потоки вместе с django, когда django запускается как fcgi? Это вообще возможно?
1 ответ
Ну, да. Никогда не начинайте свою собственную бесконечную нить, кроме django. Я использую сельдерей, где он работает немного лучше, чтобы запустить такие темы.