重播在django + apache + mod_wsgi?

时间:2010-04-05 21:28:33

标签: django apache caching wsgi

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

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

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

有人知道我是如何让它正常工作的(真实场景涉及从数据库获取数据,但这个奇怪缓存的问题是相同的。)

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

2 个答案:

答案 0 :(得分:3)

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

读:

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

可能你正在运行嵌入式模式。您应该改为使用守护进程模式。

不要设置'processes = 1',因为这是默认值,并且使用该选项还有其他可能不需要的副作用。

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

同时阅读:

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

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

答案 1 :(得分:1)

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

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

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

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

请参阅full documentation选项。