apscheduler
示例
from apscheduler.schedulers.background import BackgroundScheduler
# 创建一个后台调度器
scheduler = BackgroundScheduler()
scheduler.add_job(daomengStart, 'date', run_date=datetime.strptime(activityTime, "%Y-%m-%d %H:%M:%S"),
id=username+activityId,name=username,args=[activityId,username])
# 启动调度器
scheduler.start()
# 在应用关闭时停止调度器
atexit.register(lambda: scheduler.shutdown())
调度器:
- BlockingScheduler:适用于调度程序是进程中唯一运行的进程,调用 start函数会阻塞当前线程,不能立即返回。
- BackgroundScheduler:适用于调度程序在应用程序的后台运行,调用 start后主线程不会阻塞。
- AsyncIOScheduler:适用于使用了 asyncio模块的应用程序。
- GeventScheduler:适用于使用 gevent模块的应用程序。
- TwistedScheduler:适用于构建 Twisted的应用程序。
- QtScheduler:适用于构建 Qt的应用程序。
触发器:
APScheduler
支持多种触发器类型,这些触发器用于定义任务何时执行。以下是一些常用的触发器类型:
-
date
触发器: 这是一种一次性触发任务的触发器,可以指定任务在未来的特定日期和时间执行。from apscheduler.schedulers.background import BackgroundScheduler from datetime import datetime scheduler = BackgroundScheduler() scheduler.add_job(my_function, 'date', run_date=datetime(2023, 11, 1, 12, 0, 0))
-
interval
触发器: 这种触发器用于周期性地触发任务,可以设置任务每隔一段时间执行。scheduler.add_job(my_function, 'interval', seconds=60) # 每隔60秒执行一次
-
cron
触发器: 这是一种基于类似 cron 表达式的触发器,允许你定义更复杂的任务调度规则。scheduler.add_job(my_function, 'cron', day_of_week='mon-fri', hour=8, minute=30)
-
trigger
触发器: 这种触发器允许你使用自定义触发器,你可以定义自己的触发器逻辑。from apscheduler.triggers.cron import CronTrigger my_trigger = CronTrigger(day_of_week='mon-fri', hour=8, minute=30) scheduler.add_job(my_function, trigger=my_trigger)
这些触发器可以根据不同的需求来选择,以便定义任务的执行规则。根据你的具体应用场景,你可以选择最适合的触发器类型。更多关于 APScheduler
触发器的信息可以在官方文档中找到:https://apscheduler.readthedocs.io/en/stable/triggers.html
scheduler.add_job
方法的参数如下:
scheduler.add_job(
func, # 要执行的函数或可调用对象
trigger, # 触发器类型('date', 'interval', 'cron'等)
args=None, # 传递给函数的位置参数(列表)
kwargs=None, # 传递给函数的关键字参数(字典)
id=None, # 任务的唯一标识符
name=None, # 任务的名称
misfire_grace_time=None, # 允许的错过任务的宽限时间
coalesce=None, # 是否合并同一任务的多个触发
max_instances=None, # 允许同时运行的最大任务实例数
next_run_time=None, # 下一次运行任务的时间(对于 'date' 触发器)
jobstore=None, # 存储任务的名称
executor='default', # 执行任务的执行程序名称
replace_existing=False, # 如果任务已经存在,是否替换它
)
这些参数允许你定义任务的执行方式、参数、标识符、名称等。以下是参数的一些说明:
-
func
: 要执行的函数或可调用对象。 -
trigger
: 触发器类型,用于定义任务何时执行。 -
args
: 传递给函数的位置参数,作为一个列表。 -
kwargs
: 传递给函数的关键字参数,作为一个字典。 -
id
: 任务的唯一标识符,用于标识任务。 -
name
: 任务的名称,用于描述任务。 -
misfire_grace_time
: 允许的错过任务的宽限时间。 -
coalesce
: 是否合并同一任务的多个触发。 -
max_instances
: 允许同时运行的最大任务实例数。 -
next_run_time
: 下一次运行任务的时间(对于 'date' 触发器)。 -
jobstore
: 存储任务的名称。 -
executor
: 执行任务的执行程序名称。 -
replace_existing
: 如果任务已经存在,是否替换它。
你可以根据你的需求选择并设置这些参数,以定义任务的执行方式和行为。