Django应用程序中的datetime.now()出错

2024-10-01 11:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

def servertime():
  return HttpResponse( datetime.now() )

在我重新启动服务器并检查显示该视图的url之后,它首先看起来是正常的。有时它给出了正确的时间,有时却没有,后来它总是给出了错误的时间。不过,服务器时间是corect。

有线索吗?我在谷歌上搜索得很不走运。


Tags: django服务器视图mod应用程序wsgiubuntuapache
3条回答

我能看看你的url.py吗?

类似的行为曾经让我难堪。。。

结果是我的url.py调用视图的方式。Python只运行了datetime.now()一次,并将其存储起来以备将来调用,而不再真正调用它。这就是为什么django开发人员必须实现向模型的默认值传递函数(而不是函数调用)的功能,因为它将接受函数的第一次调用并使用它,直到python重新启动。

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

我发现让wsgi进入守护进程模式是可行的。不知道为什么,但确实是。似乎有些新创建的进程会把时间搞砸。

当类被实例化时,datetime.now()可能被求值一次。请尝试删除括号,以便返回datetime.now函数,然后对其求值。我在为DateTimeFields设置默认值时遇到了类似的问题,并编写了解决方案here

相关问题 更多 >