【发布时间】:2012-07-27 12:49:04
【问题描述】:
我想使用 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.py runserver'' 运行时,这非常有用。但是,当作为 ''./manage.py runfcgi'' 运行时,django 不会启动。没有错误消息,它只是挂起并且不会守护进程,可能在 ''notifier.start()'' 行。
当我运行 ''./manage.py runfcgi method=threaded'' 并启用行 ''notifier.setDaemon(True)'' 时,通知程序线程将停止 (isAlive() = False)。
当 django 作为 fcgi 运行时,与 django 一起启动无限线程的正确方法是什么?有没有可能?
【问题讨论】:
-
呃,你知道infinite是什么意思吗?我想说创建无限数量的线程在理论上甚至是不可能的(除非你有一台具有无限资源(RAM、内核等)的计算机)。
-
我把标题从 infinite 改为 endless 。你是对的 - 它非常模棱两可。
标签: python django fastcgi pyinotify