如果你想让一个函数在一段时间后被调用而不停止你的脚本,你本质上是在处理线程代码;如果你想设置一个函数被调用而不担心它,你要么显式地使用多线程--像em Mark Byers的answr,要么使用一个有主循环的编码框架来处理函数调度--像twisted、qt、gtk、pyglet、还有很多其他的,任何一个都需要你重写你的代码,这样它就可以从框架的主循环中工作。 要么就是这样,要么就是编写一些主循环,从事件中检查你自己的代码--总而言之,如果你想要的只是单个函数调用,threading.Timer就是一种方法。如果你想使用这些定时调用来实际循环程序,就像通常使用javascript的setTimeout所做的那样,最好选择上面列出的编码框架之一,然后重构代码以利用它。
5条答案
按热度按时间tzcvj98z1#
看一下
threading.Timer
,它在一个新线程中运行您的函数。im9ewurl2#
如果你想让一个函数在一段时间后被调用而不停止你的脚本,你本质上是在处理线程代码;如果你想设置一个函数被调用而不担心它,你要么显式地使用多线程--像em Mark Byers的answr,要么使用一个有主循环的编码框架来处理函数调度--像twisted、qt、gtk、pyglet、还有很多其他的,任何一个都需要你重写你的代码,这样它就可以从框架的主循环中工作。
要么就是这样,要么就是编写一些主循环,从事件中检查你自己的代码--总而言之,如果你想要的只是单个函数调用,threading.Timer就是一种方法。如果你想使用这些定时调用来实际循环程序,就像通常使用javascript的setTimeout所做的那样,最好选择上面列出的编码框架之一,然后重构代码以利用它。
wwtsj6pe3#
如果不需要非块特性,只需使用
time.sleep(5)
,它将在任何地方工作,并保存您的生命。oxcyiej74#
好吧,不是一个完美的解决方案,但我用了以下,因为我的工作很简单:
现在你有时间在特定的时间使用
if
来做一些事情。我的代码在while
循环中运行,所以这对我很有效。你可以做同样的事情,或者使用线程来运行这个无限循环和你自己的代码。rqqzpn5f5#
最简单的方法是使用我创建的函数setTimeout:
输入异步
执行异步导入的函数
异步定义设置超时(fn,时间):等待异步睡眠(时间)fn()
def函数():打印(“hi”)
asyncio.run设置超时(函数,1))
我目前正在尝试处理setInterval,比如重复超时,但是我得到了一个错误。