【问题标题】:What is the correct way to start endless threads when django is run as fcgi?当 django 作为 fcgi 运行时,启动无限线程的正确方法是什么?
【发布时间】: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


【解决方案1】:

嗯,呵呵。除了 django 之外,永远不要开始一个自己的、无穷无尽的线程。我使用 celery,运行这样的线程会更好一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2016-12-21
    • 1970-01-01
    • 2015-08-14
    • 2012-04-12
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多