Python schedule库调用every()函数报错,求解决方案及替代库建议
问题解决与替代调度库推荐
先排查当前schedule库问题
你遇到的every()函数不存在的问题,大概率是装错了库或者导入冲突:
- 先卸载现有schedule库,重新安装官方的
python-schedule:pip uninstall schedule pip install python-schedule - 检查项目里有没有自己命名为
schedule.py的文件,这会导致导入的是你自己的文件而非第三方库,改名即可。
替代调度库推荐
如果还是不想用schedule,这些库可以满足你的定时调度需求:
1. APScheduler
功能最全面的调度库之一,支持固定间隔、CRON表达式、指定时间等多种调度方式,还能搭配Redis、MongoDB等存储任务,适合复杂场景。
示例代码(实现每天指定时间发邮件):
from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime def send_reminder(): # 这里写你的send_email逻辑 pass scheduler = BlockingScheduler() # 解析目标时间,按小时分钟设置CRON调度 target_time = datetime.strptime("2024-05-20 09:30:00", "%Y-%m-%d %H:%M:%S") scheduler.add_job(send_reminder, 'cron', hour=target_time.hour, minute=target_time.minute) scheduler.start()
2. Celery Beat
适合分布式系统,需要搭配Celery和消息队列(比如Redis、RabbitMQ)使用,能实现大规模分布式任务调度,适合后端服务场景。
3. RQ Scheduler
轻量级的Redis调度库,和RQ队列配合使用,适合依赖Redis的项目,语法简单易上手。
示例代码:
from rq_scheduler import Scheduler from redis import Redis from datetime import timedelta def send_reminder(): # 你的邮件发送逻辑 pass # 连接Redis scheduler = Scheduler(connection=Redis(host='localhost', port=6379)) # 每天同一时间运行任务 scheduler.cron("30 9 * * *", send_reminder) # 每天9:30执行
4. sched(Python内置库)
不需要额外安装,是Python标准库自带的调度模块,适合简单的单次或周期性调度,功能相对基础。
示例代码:
import sched import time from datetime import datetime s = sched.scheduler(time.time, time.sleep) def send_reminder(sc): # 邮件发送逻辑 # 24小时后再次调度 next_run = time.time() + 86400 s.enterabs(next_run, 1, send_reminder, (sc,)) # 第一次运行时间 first_run = datetime.strptime("2024-05-20 09:30:00", "%Y-%m-%d %H:%M:%S").timestamp() s.enterabs(first_run, 1, send_reminder, (s,)) s.run()
内容的提问来源于stack exchange,提问作者Sebastian Jose
相关产品推荐
相关产品推荐

