如何在一个进程中仅使用mod_wsgi和django运行Apache?

时间:2015-02-04 09:42:11

标签: django python-2.7 apache2 mod-wsgi pyinotify

我在两个不同的进程中运行django和mod_wsgi运行apache。

我读到第二个进程是一个on-change监听器,用于在更改时重新加载代码,但由于某种原因,我的ready()类的AppConfig函数正在执行两次。此功能只能运行一次。

我知道运行带有--noreload标志的django runserver将解决开发模式下的问题,但我无法在我的apache网络服务器上找到生产模式的解决方案。

我有两个问题:

  1. 如何在生产中仅使用一个流程运行,或者至少只使一个流程运行ready()功能?

  2. 有没有办法让ready()函数不以惰性模式运行?通过这个,我的意思是只在服务器启动时执行,而不是在第一次请求时执行。

  3. 有关进一步说明,我遇到如下情况: ready()函数创建文件夹侦听器,例如pyinotify。该侦听器将侦听我的服务器上的文件夹,并将任务更改为任务。 我看到这个监听器在对受监视目录中的单个文件的任何更改上执行了两次。这让我相信这两个进程都在运行我的监听器。

2 个答案:

答案 0 :(得分:2)

不,第二个进程不是onchange listener - 我不知道你在哪里阅读。这种情况发生在开发服务器上,而不是mod_wsgi。

您不应该试图阻止Apache提供多个进程。如果这样做,您的网站速度将大幅降低:它一次只能提供一个请求,其他人排队等到第一次完成。除玩具网站外,这对任何其他事情都没有好处。

相反,您应该修复AppConfig。而不是盲目地产生一个监听器,你应该在开始一个监听器之前检查它是否已经被创建。

答案 1 :(得分:0)

您不应该阻止产生多个流程,因为它是好事,特别是在生产环境中。你应该考虑使用一些外部工具,与django分开或添加检查文件夹监听是否已经在运行(例如监视PID文件的持久性及其内容)。