pip install schedule
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)
如果是多个任务运行的话,实际上它们是按照顺序从上往下挨个执行的。如果上面的任务比较复杂,会影响到下面任务的运行时间。
解决方法:用多线程/多进程。开了一条线程,就把job独立出去运行了,不会占主进程的cpu时间,schedule并没有花掉执行一个任务的时间,它的开销只是开启一条线程的时间。
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)
Example:
if not "%1"=="wkdxz" mshta vbscript:createobject("wscript.shell").run("""%~f0"" wkdxz",vbhide)(window.close)&&exit
@echo off
D:\software\Anaconda3\envs\Delivery\python -i D:\test\test.py
- 第一行作用是使批处理后台运行,即运行时不出现CMD窗口;
- 第二行作用是不显示命令;
- 第三行是绝对路径调用python.exe执行指定pyhon脚本
C:\Users\lyuzi\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
cmd: taskkill -f -t -im python.exe
建议在python脚本中写log记录运行情况。因为后台执行bat就不知道怎么看它有没有跑了。