0

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と一緒にエンドレススレッドを開始する正しい方法は何ですか?それも可能ですか?

4

1 に答える 1

0

まあ、当たり前。django 以外の独自の無限スレッドを開始しないでください。私はセロリを使用していますが、そのようなスレッドを実行する方が少しうまく機能します。

于 2012-08-16T18:23:14.740 に答える