mfi*_*tzp 15
好吧,我会去的.假设您已安装了apscheduler(或将其放在Python路径中)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()
Run Code Online (Sandbox Code Playgroud)
我怀疑你的问题是如何在Django中触发启动.你有多种选择,主要包括"把它放在一个可以运行的地方".例如,将其添加到models.py文件的底部,或者在urls.py每次Django重新启动时将其处理一次,然后继续在后台运行.然后可以在函数内正常执行数据库访问 - 只需为查询正常导入模型.
但是,请考虑如果您这样做,您将需要在您想要更改计划时终止并重新启动服务器.我也不确定如何使用多个线程(你有> 1个计时器吗?)
你可能真的想考虑使用像Celery这样的东西(通过django-celery)来获取所有这些,还有一个单独的调度守护进程,可以更好地控制调度.
要使用这个 apscheduler,您可以使用下面的代码进行设置,您可能遇到的唯一困难是sqlalchemy建议使用 jobstore,但由于您已经有 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
)
Run Code Online (Sandbox Code Playgroud)
我建议使用:django-apscheduler,它已经与 DjangoORM 的 jobstore 集成,并且还提供了一个 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!")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5904 次 |
| 最近记录: |