我想写一个函数,它会在5秒后返回:
def myfunction():
while passed_time < 5_seconds:
do1()
do2()
do3()
.
.
return我的意思是,这个函数只运行5秒,5秒后,它应该结束,并继续其他函数:
myfunction()
otherfunction() ----> This should start 5 seconds after myfunction() is executed.诚挚的问候
发布于 2012-08-31 22:10:05
您可以执行以下操作:
def myfunction():
start = time.time()
while time.time() < start + 5:
do1()
do2()
do3()请注意,这将在至少5秒后停止-如果do1、do2和do3分别需要3秒,则此函数将需要9秒。
如果你想切断这些调用之间的myFunction,你可以这样做:
def myfunction():
todo = itertools.cycle([do1, do2, do3])
start = time.time()
while time.time() < start + 5:
todo.next()()这种情况下需要6秒
发布于 2012-08-31 22:22:03
如果您的函数的执行时间可能长于触发这些函数之间的间隔,则必须在另一个线程或进程中启动这些函数。
使用threading的示例
import time
import sys
from threading import Thread
def f1():
print "yo!!"
time.sleep(6)
def f2():
print "boring."
time.sleep(2)
if __name__ == "__main__":
threads = []
try:
for f in [f1, f2]:
t = Thread(target=f)
t.start()
threads.append(t)
time.sleep(5)
except KeyboardInterrupt:
sys.exit(0)
finally:
[t.join() for t in threads]我理解这个问题的方式是,你不一定需要在恰好5秒后终止/结束一个函数。您的主要目标是以5秒的间隔启动函数。如果你需要在一段时间后‘杀死’这些函数,这不是使用线程的小事情:Is there any way to kill a Thread in Python?
发布于 2012-09-01 04:42:21
您还可以执行以下操作:
import time
start=time.time()
stuff={1:do1,2:do2,3:do3,...}
i=1
while time.time() <= start+5:
stuff[i]()
i+=1https://stackoverflow.com/questions/12217027
复制相似问题