You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用Timer实现每日定时发送短信多任务运行问题求助

问题核心原因
  • 你创建的所有Timer实例都没有调用.start()方法,定时任务根本没有启动,这是任务不生效的首要原因
  • 时间计算逻辑有问题:直接固定给日期加1天,若当前时间早于目标时间,会导致任务延迟到第二天才触发,错过当日的执行窗口
  • 逻辑仅支持单次执行,没有循环调度逻辑,无法实现每日重复发送的需求
  • 主线程无阻塞逻辑,程序启动后会直接退出,后台定时器线程还没到执行时间就被销毁
修复优化后的完整代码
from zeep import Client
from datetime import datetime, timedelta
from threading import Timer

# 统一配置执行时间和对应短信内容,避免重复代码
TASK_CONFIG = [
    {"hour": 0, "content": "ppp"},
    {"hour": 8, "content": "fff"},
    {"hour": 9, "content": "sss"},
    {"hour": 10, "content": "aaa"},
    {"hour": 14, "content": "uuu"},
]

def send_simple_sms(txt):
    send_url = 'URL'
    client = Client(send_url)
    username = "MyUsername"
    password = "Password"
    text = txt
    to_type = client.get_type('ns0:ArrayOfString')
    to = to_type(['xxxxxxxxxxx'])
    from_ = "xxxxxxxx"
    result = client.service.SendSimpleSMS(username, password, to, from_, text, False)
    print(f"[{datetime.now()}] 发送结果:{result}")

def schedule_task(hour, content):
    # 计算下一次执行时间
    now = datetime.now()
    target_time = now.replace(hour=hour, minute=0, second=0, microsecond=0)
    # 如果今天的目标时间已过,就设置为明天的同一时间
    if target_time < now:
        target_time += timedelta(days=1)
    delay = (target_time - now).total_seconds()

    # 定义执行wrapper,执行完任务后自动调度下一次
    def task_wrapper():
        send_simple_sms(content)
        schedule_task(hour, content)
    
    # 启动定时器
    t = Timer(delay, task_wrapper)
    t.daemon = True
    t.start()

if __name__ == "__main__":
    # 初始化所有定时任务
    for task in TASK_CONFIG:
        schedule_task(task["hour"], task["content"])
    print("定时短信服务已启动,等待触发...")
    # 阻塞主线程,避免程序退出
    while True:
        pass
调整说明
  • 新增统一配置列表管理所有定时任务,减少冗余重复的函数定义,后续要修改时间或内容只需修改配置即可
  • 修复了时间计算逻辑:先判断当日目标时间是否已过,再决定是否加1天,不会错过当日的执行窗口
  • 封装了自动循环调度逻辑:每次任务执行完成后会自动计算下一天的执行时间,启动新的定时器,实现每日重复触发
  • 所有定时器创建后都显式调用start()启动,同时设置为守护线程,避免程序退出时卡住
  • 新增主线程阻塞逻辑,保证程序持续运行,不会启动后立即退出

内容的提问来源于stack exchange,提问作者merlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:45:00