python使用schedule定时任务

python中的轻量级定时任务调度库:schedule

定时任务可以使用celery或crontab等,Python中有一个轻量级的定时任务调度的库:schedule。

安装

pip install schedule

简单例子

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

def job():
print("I'm working...")

schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).days.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)

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

多任务运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import datetime
import schedule
import time

def job1():
print("I'm working for job1")
time.sleep(2)
print("job1:", datetime.datetime.now())

def job2():
print("I'm working for job2")
time.sleep(2)
print("job2:", datetime.datetime.now())

def run():
schedule.every(10).seconds.do(job1)
schedule.every(10).seconds.do(job2)

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


if __name__ == '__main__':
run()

由于上面这种方法会导致job2运行延迟,所以这时候需要使用多线程运行。

多线程运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import datetime
import schedule
import threading
import time

def job1():
print("I'm working for job1")
time.sleep(2)
print("job1:", datetime.datetime.now())

def job2():
print("I'm working for job2")
time.sleep(2)
print("job2:", datetime.datetime.now())

def job1_task():
threading.Thread(target=job1).start()

def job2_task():
threading.Thread(target=job2).start()

def run():
schedule.every(10).seconds.do(job1_task)
schedule.every(10).seconds.do(job2_task)

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


if __name__ == '__main__':
run()