如何防止在Django中同时运行Timer的多个实例?

时间:2013-02-06 07:18:39

标签: python django timer

我希望我的Django应用程序中的方法每60秒定期调用一次。这是一个非常简单的任务,我想我会使用Timer。这是我的代码,它位于我的某个应用的__init__.py中:

from threading import Timer

def hello():
    print "xxx"
    Timer(60, hello).start()

Timer(60, hello).start()

当Django导入我的应用程序时,会调用此代码。

当我执行runserver命令时,这似乎工作得很好,这个开始的两个实例似乎是因为我每隔60秒就会看到两行控制台输出。我认为这是因为运行服务器命令,运行多个进程/线程,我是否正确?

如何确保一次只运行一个计时器实例?

1 个答案:

答案 0 :(得分:2)

定期运行代码的正确方法是设置运行django命令的cron作业。 如果在apache下运行,则应为www-data用户设置cron作业(如果处于开发模式,则应在runserver情况下为您自己的用户设置)这将确保代码以相同的权限执行,并且所有权作为网络代码。

您还可以使用django-cron来简化操作(尤其是在Windows下运行时)