python apscheduler 定时任务的基本使用-6-sqlite数据库
python apscheduler 定时任务的基本使用-6-sqlite数据库
1、使用sqlite数据库步骤
-
定义数据库字典
-
指定调度器的存储器
-
添加任务即可
直接上代码
import datetime
import random
import threading
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.schedulers.blocking import BlockingScheduler
def log(msg):
t = threading.currentThread()
name = t.name
ident = t.ident
print(f"[{ident}][{name}]{msg}") # 打印线程号和线程名称
def my_job(name):
log(f'我是{name},现在时间:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")} 随机数是:{random.randint(0, 100)}')
def main():
log(f'我是主线程, 现在时间:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
shanghai = 'Asia/Shanghai'
stores = {
'default': SQLAlchemyJobStore(url='sqlite:///sqlite.sqlite3'), # 默认使用这个数据库
'sqlite2': SQLAlchemyJobStore(url='sqlite:///sqlite.sqlite3-2') # 可以通过add_job时指定使用这个数据库
}
scheduler = BlockingScheduler(jobstores=stores) # 执行线程最大10个 使用sqlite数据库
run_date = datetime.datetime.now() + datetime.timedelta(seconds=20) # 可以添加datetime对象作为运行时间
scheduler.add_job(my_job, trigger='date', args=['数据库1'], name="数据库1JOB",
run_date=run_date, timezone=shanghai, id="数据库1ID")
scheduler.print_jobs()
scheduler.start()
# 使用了BlockingScheduler 则无法执行start后面的代码
if __name__ == '__main__':
main()
运行后数据库
2、添加任务指定不同存储器
通过公共参数jobstore指定即可
运行后保存到不同的数据库
代码
import datetime
import random
import threading
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.schedulers.blocking import BlockingScheduler
def log(msg):
t = threading.currentThread()
name = t.name
ident = t.ident
print(f"[{ident}][{name}]{msg}") # 打印线程号和线程名称
def my_job(name):
log(f'我是{name},现在时间:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")} 随机数是:{random.randint(0, 100)}')
def main():
log(f'我是主线程, 现在时间:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
shanghai = 'Asia/Shanghai'
stores = {
'default': SQLAlchemyJobStore(url='sqlite:///sqlite.sqlite3'), # 默认使用这个数据库
'sqlite2': SQLAlchemyJobStore(url='sqlite:///sqlite.sqlite3-2') # 可以通过add_job时指定使用这个数据库
}
scheduler = BlockingScheduler(jobstores=stores) # 执行线程最大10个 使用sqlite数据库
run_date = datetime.datetime.now() + datetime.timedelta(seconds=20) # 可以添加datetime对象作为运行时间
scheduler.add_job(my_job, trigger='date', args=['数据库1'], name="数据库1JOB",
run_date=run_date, timezone=shanghai, id="数据库1ID")
run_date = datetime.datetime.now() + datetime.timedelta(seconds=30) # 可以添加datetime对象作为运行时间
scheduler.add_job(my_job, trigger='date', args=['数据库2'], name="数据库2JOB",
run_date=run_date, timezone=shanghai, id="数据库2ID", jobstore='sqlite2')
scheduler.print_jobs()
scheduler.start()
# 使用了BlockingScheduler 则无法执行start后面的代码
if __name__ == '__main__':
main()
分类:
apscheduler
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示