1

我有一个简单的 django 页面,上面有一个计数器。我使用 Apache2 和 mod_wsgi 来服务它。

首先,当我进入这个页面时,计数器显示为 0,这是应该的。当我第二次进入页面时,计数器显示 1 - 再次,这是正确的行为。现在问题开始了,因为当我第三次进入这个页面时,我又得到了 0。

当我刷新它时,它介于 0 和 1 之间,显然使用了一些缓存。如果我等待一段时间然后再试一次,它会显示 2 和 3,但会被这些值卡住,直到这个缓存或任何它被刷新,然后计数器继续。

有人知道我怎样才能让它正常工作(实际情况是从数据库中获取数据,但是这个奇怪的缓存的问题是一样的)。

顺便说一句,我的 django 设置中没有设置任何缓存引擎。

4

2 回答 2

3

其他海报建议的实例数!=进程*线程。实例数 == 仅限进程。

读:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

您可能正在运行嵌入式模式。您应该改用守护程序模式。

请勿设置 'processes=1',因为无论如何这是默认设置,并且使用该选项会产生您可能不想要的其他副作用。

守护程序模式的默认线程数是 15,只要您的应用程序是线程安全的就可以了。具体来说,对全局计数器的访问应该是线程安全的。

另请阅读:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide

其中有一个如何设置守护程序模式的示例。您需要同时使用 WSGIDaemonProcess 和 WSGIProcessGroup 指令,只有 WSGIDaemonProcess 是不够的。

于 2010-04-05T23:49:22.350 回答
1

您正在运行 Django 的多个实例。Apache 随机连接到其中之一。

出于测试目的,请在 apache.conf 中尝试:

WSGIDaemonProcess mysite processes=1 maximum-requests=500 threads=1

(您可能希望在生产中使用更多流程。)

请参阅选项的完整文档

于 2010-04-05T21:34:34.897 回答