Python时间延迟

drn*_*sie 34 python time

我想知道如何在一段时间后调用一个函数.我试过time.sleep()但这会暂停整个脚本.我想让脚本继续进行,但是在???s之后调用一个函数并同时运行另一个脚本

Mar*_*ers 61

看看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
Run Code Online (Sandbox Code Playgroud)

  • 最后一件事......当目标函数完成时,线程是否会自行销毁? (3认同)
  • 将此添加到此处希望可以解决后续问题。即使使用了计时器,该函数也将立即运行而无需计时器。原因是由于以下原因造成的:https://stackoverflow.com/questions/16742043/python-threading-timer-start-immediately-not-at-specified-time (2认同)
  • 如果你想给你的函数提供参数,你可以这样做:`t = Timer(30.0, hello, [arg1, arg2]) t.start()` (2认同)

jsb*_*eno 5

如果您希望在一段时间后调用一个函数而不是停止您的脚本,那么您本质上就是在处理线程代码。如果你想设置一个要调用的函数而不用担心它,你必须显式地使用多线程——比如 em Mark Byers 的 answr,或者使用一个具有主循环的编码框架来处理函数调度你 - 喜欢 Twisted、qt、gtk、pyglet 等等。其中任何一个都需要您重写代码,以便它在该框架的主循环中工作。

要么是这样,要么是通过对代码进行事件检查来编写一些主循环 - 总而言之,如果您唯一想要的是单个函数调用,那么 threading.Timer 就是这样做的方法。如果您想使用这些定时调用来实际循环程序,就像通​​常使用 javascript 的 setTimeout 完成的那样,您最好选择我上面列出的编码框架之一并重构您的代码以利用它。

  • 这段代码不起作用 threading.Timer( 30.0, self.timestart(window) ).start() 它正在调用 self.timestart,给出 arg 窗口,但它立即执行,而不是在 30 秒后会问马克,但我已经够烦他了,你也知道你在说什么:) (2认同)