首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SQLALchemyJobStore保存python Apscheduler

如何使用SQLALchemyJobStore保存python Apscheduler
EN

Stack Overflow用户
提问于 2018-02-02 14:23:03
回答 1查看 4.1K关注 0票数 1

最近,我正在使用python在本地主机服务器上制作个人新闻聚合器。我想从许多不同的网站在每天的特定时间自动获得RSS馈送。我在互联网上搜索了一下,发现有Apscheduler图书馆。为了避免每次打开计算机时都创建新的调度程序,我认为最好使用SQLALchemyJobStore将调度程序保存在我的Mysql数据库中。

here上有很多关于创建调度器和配置的信息,但我找不到任何关于存储和加载的信息。假设下面的代码是我想要创建的调度程序,我如何在数据库中保存和加载scheduler变量?

代码语言:javascript
复制
from pytz import utc

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor


jobstores = {
    'mongo': MongoDBJobStore(),
    'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
executors = {
    'default': ThreadPoolExecutor(20),
    'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
    'coalesce': False,
    'max_instances': 3
}
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-05 22:23:41

正如@Sraw提到的,你不需要担心如何加载作业,它会为你做这件事。您忘记了在结尾处添加了一行,即

代码语言:javascript
复制
scheduler.start()

在添加作业时,不要忘记添加job_store。

代码语言:javascript
复制
scheduler.add_job(jobstore='mongo', trigger='cron', minute=8)

在我的例子中,我使用的是

代码语言:javascript
复制
jobstores = {
    'mongo': MongoDBJobStore()
}

它在我的mongo中用集合‘job’创建了'apscheduler‘数据库。您可以使用mongo shell手动检查作业是否正在加载。您还可以使用调度程序的print_jobs或get_jobs()

代码语言:javascript
复制
scheduler.print_jobs(jobstore='mongo') #mongo in case only
jobs = scheduler.get_jobs(jobstore='mongo') #mongo in my case only

最终,您的代码将如下所示

代码语言:javascript
复制
from pytz import utc

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor


jobstores = {
  'mongo': MongoDBJobStore(),
  'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
executors = {
  'default': ThreadPoolExecutor(20),
  'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
  'coalesce': False,
  'max_instances': 3
}
scheduler = BackgroundScheduler(jobstores=jobstores, 
executors=executors, job_defaults=job_defaults, timezone=utc)
scheduler.start()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48576822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档