2012-07-25 73 views
12

具体如何如何在Django项目中设置APScheduler?

  • 设置APScheduler在Django项目
  • 开始运行
  • 写入Django的ORM
+0

你想实现什么?你是什​​么意思*写给Django ORM *? – MattH 2013-04-04 10:27:49

+0

我们可以给你一个和你的问题一样清晰的回应:安装django,安装APScheduler。写下你的看法。使用add_date_job添加作业。并在你的工作中随心所欲 – ornoone 2013-04-09 08:42:34

+0

由于APScheduler支持SQLAlchemy和MongoDb作为作业存储,他希望使用Django ORM。我猜。 – laffuste 2013-04-11 09:12:22

回答

12

嗯,我会一展身手。假设你已经安装了apscheduler(或把它放在你的Python路径)的basic documentation for APS列出了下面的代码用于启动作业:

from apscheduler.scheduler import Scheduler 

sched = Scheduler() 

@sched.interval_schedule(hours=3) 
def some_job(): 
    print "Decorated job" 

sched.configure(options_from_ini_file) 
sched.start() 

我怀疑你遇到的问题是如何引发的,在Django的启动。你有多种选择,主要包括“将它放置在某个地方”。例如,将其添加到models.py文件的底部或urls.py,并且它将在每次Django重新启动时处理一次,然后继续在后台运行。数据库访问然后可以在函数内正常执行 - 只需按照正常的查询导入模型。

但是,考虑到如果你这样做,你将需要杀死&任何时候你想改变计划重新启动你的服务器。我也不确定这是怎么会与多个线程(你会有> 1定时器?)

你真的可能要考虑去像Celery(通过django-celery)这让你所有这一切,再加上单独的调度守护进程和更好的调度控制。

+4

谢谢,创业公司对我来说是最有趣的一点。我正在查看APScheduler,因为Celery中的CrontabScheduler不支持小于分钟的分辨率,而IntervalScheduler不像APScheduler那样支持start_date。 这意味着它不可能像“每秒星期一”和“星期一20:14:50”那样开箱即可。但我决定坚持使用Celery,并使用自定义调度程序。 我更喜欢有一个单独的进程,它运行在web服务器进程之外。 IMO更容易控制和调试。 – jeverling 2013-04-13 10:20:51

+0

“但是,请考虑一下,如果你这样做,那么只要你想改变时间安排,你就需要杀死并重启你的服务器。”其实这不一定需要杀死服务器。简单地启动APscheduler并不要求它添加工作。 OP可以简单地在某个地方启动调度程序,然后根据需要在其他地方添加和删除作业代码,例如,在某些用户的视图中。如果OP不想处理使用Celery的开销并计划简化事务,这仍然是一个选择。 – skeletalbassman 2016-02-10 00:39:31