我正在开发一个简单的Python程序,名为“Ilmiont DDNS Alerter”。正如标题所示,其目的是让您知道动态IP地址何时更改。在
它通过咨询外部服务器来实现这一点。在Tkinter GUI中,用户可以选择一个时间频率来更新它。当他们启动更新程序时,我希望按照用户的指定,将更新函数安排为每x分钟运行一次。我看过sched模块,但它似乎只安排了一次。如何让它在间隔时间内重复检查新IP,直到停止?在
我不知道该怎么安排。另外,当更新程序运行时,当进程完成时,GUI没有响应。这可能需要几秒钟的时间,尤其是在连接速度慢的情况下。也许线程可以克服这个问题?在
你有两个选择:
每5(或x)分钟运行一次以添加到计划中的循环
或者安排函数在上次完成后x分钟再次运行。
在这两种情况下,
cancel
按钮只会在某个地方设置一个标志,运行中的函数应该检查它作为第一个操作。在第一种情况最大的缺点是它会锁定其他代码的执行。更简单的方法是让函数在运行后自行调度。如果您的其他代码花费了很长时间,那么线程化绝对是您可以研究的一个选项;我不必亲自使用它,但是类似于下面代码的代码应该可以工作:
所以点击“Start”,它会每隔两秒打印一次时间,另外还有一个函数会在这期间运行。你可以在任何时候点击“ACTIVE”来证明接口是响应的。我希望这对你有帮助?如果你真的反对函数本身的调用,你可以启动一个线程,它只运行一个无限循环,向队列中添加事件,但这似乎是一个不必要的复杂问题。在
我确实注意到,如果slow_execute函数执行大量的数字运算,那么线程并不是最好的选择,线程主要用于由于全局解释器锁的作用而导致的慢I/O。如果你在等待结果/沟通,应该没问题。在
你可以试试Threading.Timer
看这个例子
它每分钟都会打印“
Running job_function
”我认为这与你所要寻找的相似,给出的答案可能也适用于你的问题。Loop socket request every 5 seconds (Python)
答案表明,您应该使用一个名为“after峎idle”的tkinter模块,该模块会在GUI不再忙时调度调用的函数。也可以使用.after(time,function)在再次调用函数之前延迟一段特定的时间。在
祝你好运!在
相关问题 更多 >
编程相关推荐