Как правильно запустить бесконечные потоки, когда 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. Я использую сельдерей, где он работает немного лучше, чтобы запустить такие темы.

Другие вопросы по тегам