利用计算机能够帮助我们执行定时定点或者间隔时间段的任务,特别是对于容易遗忘、重复操作、准点执行等任务非常方便。除了在 Linux 上使用 corntab 等完成之外,在 Python 中也可以编程实现定时定点等任务的执行。本篇介绍 time, threading.Timer, schedule, apscheduler 等四个模块。

Time

定时 3 秒后,依次执行相同任务 5 次

1
2
3
4
5
6
7
8
9
10
11
from datetime import datetime
import time


def showTime(count):
time.sleep(count)
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))

# 使用 while 可永久执行
for i in range(5):
showTime(3)

Threading.Timer

定时 3 秒后,同时执行相同任务 5 次

1
2
3
4
5
6
7
8
9
10
11
12
from datetime import datetime
from threading import Timer


def showTime():
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))

# 使用 while 可永久执行
for i in range(5):
count = 3
t = Timer(count, showTime)
t.start()

schedule

每个 3 秒,执行任务

1
2
3
4
5
6
7
8
9
10
11
12
13
import time
import schedule


def showTime():
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))


schedule.every(3).seconds.do(showTime)

while True:
schedule.run_pending()
time.sleep(1)

apscheduler

定时顶点/间隔执行任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler


# 定制执行任务
def showTime():
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))


# 创建调度器对象,并设置时区
scheduler = BlockingScheduler(timezone="Asia/Shanghai")

# 分配任务
## 使用 cron,类似 Linux 中 crontab
# scheduler.add_job(func=showTime, trigger="cron", day_of_week='0-6', hour=14, minute=15, second=1)
scheduler.add_job(func=showTime, trigger="cron", second='*/3') # 每隔 3 秒执行一次
## 固定间隔
# scheduler.add_job(func=showTime, trigger="interval", seconds=3)
## 定点执行
# scheduler.add_job(func=showTime, trigger='date', run_date='2021-10-27 15:48:05', args=[])

# 启动调度器
scheduler.start()

参考链接

  1. 你知道 Python 中的定时任务吗?
  2. python - 如何通过APScheduler 3.0的UTC时区?
  3. APScheduler定时框架
  4. Python任务调度模块APScheduler