pyinotifyを使用してファイルシステムの変更を監視したいと思います。ファイルが変更された場合は、それに応じてデータベースファイルを更新したい(タグの再読み込み、その他の情報...)
次のコードをアプリのsignals.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.pyrunserver''で実行されている場合にうまく機能します。ただし、'' ./manage.py runfcgi''として実行すると、djangoは起動しません。エラーメッセージはありません。おそらく「notifier.start()」の行で、ハングしてデーモン化されません。
'' ./manage.py runfcgi method = threaded''を実行し、行'' notifier.setDaemon(True)''を有効にすると、通知スレッドが停止します(isAlive()= False)。
djangoがfcgiとして実行されているときに、djangoと一緒にエンドレススレッドを開始する正しい方法は何ですか?それも可能ですか?