阻止 root.mainloop() 执行的无限循环 - Python

Posted

技术标签:

【中文标题】阻止 root.mainloop() 执行的无限循环 - Python【英文标题】:Infinite loop preventing root.mainloop() from executing- Python 【发布时间】:2022-01-24 03:59:41 【问题描述】:

嘿,伙计们,这可能很愚蠢,但我无法找到解决方法...我试图每天运行我的 python 代码,并且我使用调度来执行此操作。但是,它会阻止到达root.mainloop(),因为之前存在无限循环。这是网站https://pypi.org/project/schedule/ 如果有更好的方法来“安排”我的代码在某些日子的某个时间运行,我将不胜感激!这是下面的示例代码。

def job():
    print("I am doing this job!")


schedule.every().monday.at("11:21").do(job)
schedule.every().tuesday.at("14:00").do(job)
schedule.every().wednesday.at("22:00").do(job)
schedule.every().thursday.at("14:00").do(job)
schedule.every().friday.at("14:00").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)
    

root.mainloop()

谢谢!

【问题讨论】:

官方文档中有一个example在子线程中运行while循环。 【参考方案1】:

官方文档中有example在子线程中运行while循环。

下面是另一个简单的例子:

import threading
...

def check_schedule():
    while True:
        schedule.run_pending()
        time.sleep(1)

threading.Thread(target=check_schedule, daemon=True).start()

root.mainloop()

如果job()不是长时间运行的任务,可以使用after()代替while循环:

...

def check_schedule():
    schedule.run_pending()
    root.after(1000, check_schedule)

check_schedule() # start the loop

root.mainloop()

【讨论】:

感谢您的回复。我应该在哪里输入代码行 schedule.every().thursday.at("09:28").do(send_email()) 以便它在特定时间发送电子邮件? @kyle 与您安排job()的方式相同。

以上是关于阻止 root.mainloop() 执行的无限循环 - Python的主要内容,如果未能解决你的问题,请参考以下文章

python如何程序一直运行?

线程运行一个我无法控制的无限操作。如何阻止它? [复制]

如何在Windows下编写在后台一直运行的Python程序

python语法root=Tkinter.Tk()

无法终止python程序

无限循环计算阶乘问题