我希望我的Django应用程序中的方法每60秒定期调用一次。这是一个非常简单的任务,我想我会使用Timer
。这是我的代码,它位于我的某个应用的__init__.py
中:
from threading import Timer
def hello():
print "xxx"
Timer(60, hello).start()
Timer(60, hello).start()
当Django导入我的应用程序时,会调用此代码。
当我执行runserver
命令时,这似乎工作得很好,这个开始的两个实例似乎是因为我每隔60秒就会看到两行控制台输出。我认为这是因为运行服务器命令,运行多个进程/线程,我是否正确?
如何确保一次只运行一个计时器实例?
答案 0 :(得分:2)
定期运行代码的正确方法是设置运行django命令的cron作业。
如果在apache下运行,则应为www-data用户设置cron作业(如果处于开发模式,则应在runserver
情况下为您自己的用户设置)这将确保代码以相同的权限执行,并且所有权作为网络代码。
您还可以使用django-cron来简化操作(尤其是在Windows下运行时)