Python 如何在Django项目中设置APScheduler?
具体来说,如何Python 如何在Django项目中设置APScheduler?,python,django,Python,Django,具体来说,如何 Django项目中的设置 开始跑步 写信给Django ORM 好吧,我来试试。假设您已经安装了apscheduler(或将其放在Python路径中),则列出了启动作业的以下代码: from apscheduler.scheduler import Scheduler sched = Scheduler() @sched.interval_schedule(hours=3) def some_job(): print "Decorated job" sched.c
- Django项目中的设置
- 开始跑步
- 写信给Django ORM
- 好吧,我来试试。假设您已经安装了apscheduler(或将其放在Python路径中),则列出了启动作业的以下代码:
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
文件的底部,或添加到url.py
中,每次Django重新启动时将对其进行一次处理,然后继续在后台运行。然后,可以在函数中正常地执行数据库访问—只需将模型作为正常的查询导入即可
但是,如果你这样做,你将需要在任何时候改变和重新启动你的服务器。我也不确定多线程的情况如何(你会有>1个计时器吗?)
你可能真的想考虑一下(通过)让你得到这一切,再加上一个单独的调度守护进程,对调度有更精细的控制。
< P>使用这个AppMe调器,你可以用下面的代码设置它,您唯一可能遇到困难的部分是推荐使用jobstoresqlalchemy
,但由于您已经有了django ORM,因此也可以使用它
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.start()
def myjob():
print('hello')
scheduler.add_job(myjob, 'cron', hour=0)
scheduler.add_job(
myjob,
'date',
id=id_value,
jobstore="default",
run_date=scheduler_date,
replace_existing=True
)
我建议使用:它已经与jobstore和Djangorm集成,还提供了一个web界面来管理作业
对于django apscheduler,可以使用以下代码
import time
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events,
register_job
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
@register_job(scheduler, "interval", seconds=1)
def test_job():
time.sleep(4)
print("I'm a test job!")
# raise ValueError("Olala!")
register_events(scheduler)
scheduler.start()
print("Scheduler started!")
你想要实现什么?你写Django ORM是什么意思?我们可以给你一个和你的问题一样清楚的回答:安装Django,安装APScheduler。写下你的观点。使用“添加日期”作业添加作业。在这项工作中,你可以在任何地方做你想做的事情。由于APScheduler支持SQLAlchemy和MongoDb作为工作存储,他想使用Django ORM。我猜。谢谢,创业对我来说是最有趣的一点。我在看APScheduler,因为芹菜中的CrontabScheduler不支持小于分钟的分辨率,IntervalsScheduler也不像APScheduler那样支持开始日期。这意味着“每一个星期一”和“星期一20:14:50”这样的事情是不可能开箱即用的。但我决定坚持使用芹菜,并使用自定义调度程序。我更喜欢有一个独立的进程,它在Web服务器进程之外运行。“更容易控制和调试,”IMO.“但是,如果你这样做,你将需要杀死和重新启动你的服务器任何时候你想改变日程安排。”实际上,这并不一定需要杀死服务器。简单地启动APscheduler不需要添加作业。OP可以简单地在某个地方启动调度程序,然后在其他地方编写代码,以便根据需要添加和删除作业,例如在特定用户的视图中。如果OP不想处理使用芹菜的开销并计划保持简单,这仍然是一个选项。如果您在Heroku上部署,您是否可以创建一个
clock.py
文件并从Procfile调用它?(