apscheduler
2021-01-25 22:35:54 4 举报
AI智能生成
apscheduler源码分析
作者其他创作
大纲/内容
Executor
start
类似初始化
submit_job
run_job( job, 'default', run_times, self._logger.name) 线程
self._instances[job.id] += 1
完成之后 - 1
MemoryJobStore
get_due_jobs
每一个job都有一个时间戳
如果这个时间戳 > now
就是due jobs
get_next_run_time
所有jobs里面下一个要执行的时间
add_job
update_job
更新job 下次运行时间
Job
modify
self._scheduler.modify_job
reschedule
self._scheduler.reschedule_job
pause
self._scheduler.pause_job
resume
self._scheduler.resume_job
remove
self._scheduler.remove_job
_get_run_times
获取多次运行时间, 根据trigger
BlockingScheduler
start
_main_loop
configure
pause
running 才有意义
resume
pause 才有意义
add_executor
remove_executor
add_jobstore
remove_jobstore
add_listener
remove_listener
add_job
scheduled_job
一个装饰器和add_job差不多
modify_job
直接修改job
reschedule_job
只修改trigger modify_job的快捷方式
pause_job
next_run_time=None modify_job的快捷方式
resume_job
只更新next_run_time
get_jobs
在运行
_jobstores
暂停
_pending_jobs
Scheduler
属性
_executors
_jobstores
_listeners
_pending_jobs
state
STATE_STOPPED
STATE_RUNNING
STATE_PAUSED
方法
_configure
self._logger = getLogger('apscheduler.scheduler')
self.timezone = astimezone(config.pop('timezone', None)) or get_localzone()
_job_defaults
'misfire_grace_time': 过期时间, 超过多少秒,就废弃,
'coalesce': 如果job过期,只取几个,其他都废弃,
'max_instances': 同一个job几个线程在同时运行
'coalesce': 如果job过期,只取几个,其他都废弃,
'max_instances': 同一个job几个线程在同时运行
self.add_executor(executor, alias)
add_jobstore
jobstore.start(self, alias)
self.wakeup()
self._event.set()
add_job
job = Job(self, **job_kwargs)
self.state
STATE_STOPPED
self._pending_jobs.append((job, jobstore, replace_existing))
else
self._real_add_job(job, jobstore, replace_existing)
update job defaults / next_run_time
job_store.add_job(job)/ store.update_job(job)
self.wakeup()
start
self._event = Event()
BaseScheduler.start(self, *args, **kwargs)
executor.start(self, alias)
store.start(self, alias)
self._real_add_job(job, jobstore_alias, replace_existing) from self._pending_jobs
while True : self._process_jobs()
遍历self._jobstores
jobstore.get_due_jobs(now)
for job in due_jobs:
run_times = job._get_run_times(now)
executor.submit_job(job, run_times)
job_next_run = job.trigger.get_next_fire_time(run_times[-1], now)
if job_next_run:
job._modify(next_run_time=job_next_run)
jobstore.update_job(job)
else:
self.remove_job(job.id, jobstore_alias)
job._modify(next_run_time=job_next_run)
jobstore.update_job(job)
else:
self.remove_job(job.id, jobstore_alias)
jobstore_next_run_time = jobstore.get_next_run_time()
jobstore_next_run_time 可能会提前 根据业务逻辑
收藏
0 条评论
下一页