Python无限循环调度函数:邮件x值不更新及重复发送问题求解
问题解决:每30秒发送含最新循环次数的邮件
原代码问题分析
- x值不更新:调用
schedule.every(30).seconds.do(send_email, 'Update Email', str(x))时,str(x)是直接传入当前x的字符串值,后续x变化不会影响已添加任务的参数,所以每次发送的都是任务创建时的x值。 - 大量重复邮件:无限循环中每次都添加新的定时任务,导致任务队列不断累积,
schedule.run_pending()会触发所有到期的重复任务,短时间内发送大量邮件。
修改后的代码
import schedule import time x = 0 def send_email_wrapper(): global x send_email('Update Email', str(x)) x += 1 # 只创建一次定时任务 schedule.every(30).seconds.do(send_email_wrapper) while True: schedule.run_pending() time.sleep(1)
改动说明
- 用包装函数传递动态参数:定义
send_email_wrapper函数,每次执行时都会读取当前最新的x值,再调用send_email,确保邮件内容是最新的循环次数。 - 任务只创建一次:把定时任务的创建放在循环外面,避免每次循环都添加新任务,这样每30秒只会触发一次任务执行。
- 调整x递增时机:将x的递增放在任务执行后,保证每次发送的邮件对应当前的循环次数,发送完成后再计数。
内容的提问来源于stack exchange,提问作者zsharkdev
相关产品推荐
相关产品推荐

