Django应用程序中的datetime.now()变坏了

Nix*_*arn 6 python apache django datetime mod-wsgi

我部署之后,我遇到了Django应用程序的一些问题.我在ubuntu服务器上使用Apache + mod-wsgi.我重新启动服务器一段时间后,时间变为foobar,大约-10小时就错了.我做了一个Django视图,看起来像:

def servertime():
  return HttpResponse( datetime.now() )
Run Code Online (Sandbox Code Playgroud)

并在我重新启动服务器并检查显示该视图的URL后,它首先看起来没问题.然后在某一时刻,它有时会给出正确的时间,有时则没有,之后它总会给出错误的时间.但服务器时间是核心.

有线索吗?我没有运气就google了.

phi*_*llc 6

我也能看到你的urls.py吗?

类似的行为让我难过一次......

结果是我的urls.py调用视图的方式.Python运行了datetime.now()一次并将其存储以供将来调用,从不再真正调用它.这就是为什么django开发人员必须实现将函数而不是函数调用传递给模型的默认值的能力,因为它将首先调用函数并在重新启动python之前使用它.

您的行为听起来像第一次是正确的,因为它是第一次调用视图.有时这是不正确的,因为它再次得到相同的日期.然后它再次随机纠正,因为你的apache可能为它启动了另一个工作进程,当你在哪个进程处理请求之间反弹时,可能会发生疯狂.


Nix*_*arn 5

我发现将wsgi放在守护进程模式下可行.不知道为什么,但确实如此.似乎有些新创建的流程会让时间搞得一团糟.

  • 很可能是因为您在Apache中同时运行了一些其他Web应用程序,例如PHP,并且该应用程序正在将时区更改为另一个值并与Django应用程序混淆.http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Timezone_and_Locale_Settings上的mod_wsgi文档中记录了此问题. (6认同)