Python 时间延迟
Posted
技术标签:
【中文标题】Python 时间延迟【英文标题】:Python Time Delays 【发布时间】:2011-03-26 21:39:19 【问题描述】:我想知道如何在一段时间后调用函数。我试过 time.sleep() 但这会停止整个脚本。我希望脚本继续运行,但在 ???secs 后调用一个函数并同时运行另一个脚本
【问题讨论】:
【参考方案1】:看看threading.Timer
。它在新线程中运行您的函数。
from threading import Timer
def hello():
print "hello, world"
t = Timer(30.0, hello)
t.start() # after 30 seconds, "hello, world" will be printed
【讨论】:
多线程...嗯,听起来很熟悉。那不是有不止一个过程吗?好吧,无论如何,这看起来是对的。如果我多次使用 t.start(),它会继续,给我一个错误还是重新启动计时器? @drnessie:“那不是有多个进程吗?”不 - 这是当你有多个线程时。 “如果我多次使用 t.start(),它会继续,给我一个错误还是重新启动计时器?” - 你得到一个错误'RuntimeError: thread already started',你可以通过复制上面源代码的最后一行并运行它来轻松地自己验证。 除了停止然后重新启动计时器之外,还有什么方法可以消除错误? 最后一件事......当目标函数完成时线程会自行销毁吗? 在此处添加此内容,希望它能回答后续问题。即使我使用了计时器,该功能也会在没有计时器的情况下立即运行。原因是这个:***.com/questions/16742043/…【参考方案2】:如果您希望某个函数在一段时间后被调用而不是停止您的脚本,那么您本质上就是在处理线程代码。如果您想设置要调用的函数而不担心它,您必须明确使用多线程 - 就像 em Mark Byers 的 answr 一样,或者使用具有主循环的编码框架来处理函数调度你——比如twisted、qt、gtk、pyglet 等等。其中任何一个都需要您重写代码,以便它在该框架的主循环中工作。
要么是这样,要么是通过事件检查自己的代码编写一些主循环 - 总而言之,如果您唯一想要的是单个函数调用,那么 threading.Timer 就是这样做的方法。如果您想使用这些定时调用来实际循环程序,就像通常使用 javascript 的 setTimeout 一样,您最好选择我上面列出的编码框架之一并重构您的代码以利用它。
【讨论】:
这段代码不工作 threading.Timer( 30.0, self.timestart(window) ).start() 它正在调用 self.timestart,给出 arg 窗口,但它是立即执行的,不是30 秒后会问马克,但我已经够烦他了,你也知道你在说什么 :)【参考方案3】:只需使用time.sleep(5)
,它可以在任何地方工作并挽救您的生命。
【讨论】:
【参考方案4】:好吧,这不是一个完美的解决方案,但我使用了以下方法,因为我的工作很简单:
counter_time = 0
while True:
time.sleep(0.1)
counter_time = counter_time + 0.1
现在您有时间只需在特定时间使用if
做某事。我的代码在while
循环内运行,所以这对我有用。您可以执行相同的操作或使用线程与您自己的代码一起运行此无限循环。
【讨论】:
以上是关于Python 时间延迟的主要内容,如果未能解决你的问题,请参考以下文章