Python Django应用程序中的datetime.now()发生故障

Python Django应用程序中的datetime.now()发生故障,python,django,apache,datetime,mod-wsgi,Python,Django,Apache,Datetime,Mod Wsgi,在部署Django应用程序之后,我遇到了一些问题。我在ubuntu服务器上使用Apache+mod wsgi。在我重新启动服务器一段时间后,时间变慢了,大约-10个小时是错误的。我创建了一个Django视图,看起来像: def servertime(): return HttpResponse( datetime.now() ) 在我重新启动服务器并检查显示该视图的url后,它首先看起来正常。然后在某一时刻,它有时给出正确的时间,有时不给出,后来它总是给出错误的时间。不过服务器时间是正确的

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

def servertime():
  return HttpResponse( datetime.now() )
在我重新启动服务器并检查显示该视图的url后,它首先看起来正常。然后在某一时刻,它有时给出正确的时间,有时不给出,后来它总是给出错误的时间。不过服务器时间是正确的


有什么线索吗?我用谷歌搜索了一下,运气不好。

我也能看看你的URL.py吗

类似的行为曾经困扰过我

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


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

您可能需要像这样指定内容类型

def servertime():
  return HttpResponse( datetime.now(), content_type="text/plain" )
另一个想法是:

它可能不起作用,因为datetime.now()返回datetime对象。试试这个:

def servertime():
  return HttpResponse( str(datetime.now()), content_type="text/plain" )

可能服务器正在计算datetime.now()在服务器启动时,尝试通过模板或在视图中使用变量使其变为惰性


看看这个。

我发现将wsgi置于守护程序模式是可行的。不知道为什么,但确实如此。似乎一些新创建的进程的时间被搞砸了。

Django根据您的设置设置系统时区变量时区。当使用不同的时区设置运行多个Django实例时,这可能会导致各种混乱

Django就是这样做的:

os.environ['TZ'] = self.TIME_ZONE
以上答案:

“我发现将wsgi置于守护程序模式是可行的”

不适合我

我想我不会再使用django的内置时区了。

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

尝试在settings.py中设置时区(时区变量)


这对我很管用。

正好是10个小时吗?可能是时区问题。我也尝试过同样的错误。似乎
datetime.now()
方法在服务器启动时只计算一次,之后是常量(日期而不是小时)。确实是非常奇怪和意外的行为。我将尝试在守护进程模式下设置wsgi_mod,正如在标记的答案中所建议的那样。事实上,我同时也在运行一个PHP应用程序……这是Django 1.1的应用程序,因此Django的新时区支持可能不再是问题了。很可能是因为您同时在Apache中运行了其他web应用程序,例如PHP,该应用程序将时区更改为另一个值,并使用Django应用程序。此问题记录在mod_wsgi文档中。