我有一个简单的django页面,上面有一个计数器。 我使用带有mod_wsgi的Apache2来提供服务。
首先,当我进入此页面时,计数器显示0,应该如此。 第二次进入页面时,计数器显示1 - 再次,这是正确的行为。 问题现在开始了,因为当我第三次进入这个页面时,我再次得到0。
当我刷新它在0和1之间时,显然使用一些缓存左右。 如果我等待一段时间然后再试一次,它会显示2和3,但是会被这些值卡住,直到这个缓存或其它任何东西都会被刷新,然后计数器继续。
有人知道我是如何让它正常工作的(真实场景涉及从数据库获取数据,但这个奇怪缓存的问题是相同的。)
顺便说一下,我的django设置中没有设置任何缓存引擎。
答案 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选项。