Django计时器线程

时间:2009-12-29 13:22:46

标签: django multithreading timer

我想定期在我的Django应用程序中计算一些信息。 我需要每秒选择并插入数据,并希望使用Django ORM。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

在shell脚本中,设置DJANGO_SETTINGS_MODULE变量并调用python脚本

export DJANGO_SETTINGS_MODULE=yourapp.settings
python compute_some_info.py

在compute_some_info.py中,设置django并导入模块(查看manage.py脚本如何设置运行Django)

#!/usr/bin/env python
import sys
try:
    import settings # Assumed to be in the same directory.
except ImportError:
    sys.stderr.write("Error: Can't find the file 'settings.py'")
    sys.exit(1)

sys.path = sys.path + ['/yourapphome']
from yourapp.models import YourModel

YourModel.compute_some_info()

然后在cron作业中调用shell脚本。

或者 - 你可以继续跑步和睡觉(如果它每秒都更好) - 你仍然希望在网络服务器之外以及你自己设置的过程中。

答案 1 :(得分:0)

执行此操作的一种方法是创建自定义命令,并从cron或Windows调度程序中调用python manage.py your_custom_command

http://docs.djangoproject.com/en/dev/howto/custom-management-commands/

例如,创建myapp/management/commands/myapp_task.py,其内容为:

from django.core.management.base import NoArgsCommand

class Command(NoArgsCommand):
    def handle_noargs(self, **options):
        print 'Doing task...'
        # invoke the functions you need to run on your project here
        print 'Done'

然后你可以像这样从cron运行它:

export DJANGO_SETTINGS_MODULE=myproject.settings; export PYTHONPATH=/path/to/project_parent; python manage.py myapp_task