python 实现定时执行程序

1.sched

python内置的模块,它是一个调度(延时处理机制),每次想要定时执行某任务都必须写入一个调度。

import sched
import time
from datetime import datetime
# 初始化sched模块的 scheduler 类
# 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
# 生成调度器
schedule = sched.scheduler(time.time, time.sleep)
# 被周期性调度触发的函数
def printTime(inc):
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    schedule.enter(inc, 0, printTime, (inc,))
# 默认参数60s
def main(inc=60):
    # enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,
    # 给该触发函数的参数(tuple形式)
    schedule.enter(0, 0, printTime, (inc,))
    schedule.run()
# 10s 输出一次
main(10)

2.threading.Timer

在多线程场景中,会有线程安全问题,run()函数会阻塞主线程。官方建议使用threading.Timer类代替

import time
from threading import Timer

def print_time(t):
    print("From print_time", time.time(),t)

def print_some_times():
    print(time.time())
    Timer(5, print_time,args=("5s",)).start()
    Timer(10, print_time,args=("10s",)).start()
    time.sleep(11)  # 阻塞主线程,等待调度程序执行完毕,再执行后面内容
    print(time.time())

print_some_times()

3.schedule

使用命令安装schedule库

pip install schedule
import schedule
import time
 
def job(name):
    print("I'm working...",name)
#每隔十分钟执行一次任务
schedule.every(10).minutes.do(job,name)
# 每隔一小时执行一次任务
schedule.every().hour.do(job,name)
# 每天的10:30执行一次任务
schedule.every().day.at("10:30").do(job,name)
# 每隔5到10天执行一次任务 
schedule.every(5).to(10).days.do(job,name)
# 每周一的这个时候执行一次任务
schedule.every().monday.do(job,name)
# 每周三13:15执行一次任务
schedule.every().wednesday.at("13:15").do(job,name)

 
while True:
	#run_pending:运行所有可以运行的任务
    schedule.run_pending()
    time.sleep(1)
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是Python实现定时任务的几种方法: 1. 使用while True和time.sleep()函数实现定时任务 ```python import time def some_task(): print("This is a timed task.") while True: some_task() time.sleep(60) # 每隔60秒执行一次任务 ``` 2. 使用threading.Timer定时器实现定时任务 ```python import threading def some_task(): print("This is a timed task.") def timer(): some_task() timer = threading.Timer(60, timer) # 每隔60秒执行一次任务 timer.start() timer() ``` 3. 使用Timeloop库实现定时任务 ```python from timeloop import Timeloop from datetime import timedelta tl = Timeloop() @tl.job(interval=timedelta(seconds=60)) def some_task(): print("This is a timed task.") tl.start(block=True) ``` 4. 使用调度模块sched实现定时任务 ```python import sched import time s = sched.scheduler(time.time, time.sleep) def some_task(): print("This is a timed task.") s.enter(60, 1, some_task, ()) # 每隔60秒执行一次任务 s.enter(60, 1, some_task, ()) s.run() ``` 5. 使用任务框架APScheduler实现定时任务 ```python from apscheduler.schedulers.blocking import BlockingScheduler def some_task(): print("This is a timed task.") scheduler = BlockingScheduler() scheduler.add_job(some_task, 'interval', seconds=60) # 每隔60秒执行一次任务 scheduler.start() ``` 6. 使用分布式消息系统celery执行定时任务 ```python from celery import Celery from datetime import timedelta app = Celery('tasks', broker='pyamqp://guest@localhost//') @app.task def some_task(): print("This is a timed task.") app.conf.beat_schedule = { 'some_task': { 'task': 'tasks.some_task', 'schedule': timedelta(seconds=60), # 每隔60秒执行一次任务 }, } app.conf.timezone = 'UTC' ``` 7. 使用Windows自带的定时任务 在Windows系统中,可以使用计划任务实现定时任务。具体操作可以参考Windows系统的相关文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图像处理大大大大大牛啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值