[英]How to make a function run for a particular time period?
我想讓我的功能運行一段特定的時間,比如5秒; 我怎么能這樣做?
喜歡,
def my_function():
while(time == 10 seconds):
......... #run this for 10 seconds
def my_next_function():
while(time == 5 seconds):
......... #run this for 5 seconds
這肯定會對你有所幫助。
import time
def myfunc():
now=time.time()
timer = 0
while timer != 10:
end = time.time()
timer = round(end-now)
def mynextfunc():
now=time.time()
timer = 0
while timer != 5:
end = time.time()
timer = round(end-now)
myfunc()
print "myfunc() exited after 10 seconds"
mynextfunc()
print "mynextfunc() exited after 5 seconds"
我會使用<=
,而不是!=
那里。 圓形,你會得到整數倍,但如果發生丑陋的事情,你跳過一秒,它將永遠運行!
如果單個循環迭代不需要花費太多時間:
#!/usr/bin/env python3
from time import monotonic as timer
def my_function():
deadline = timer() + 10
while timer() < deadline:
......... #run this for 10 seconds
def my_next_function():
deadline = timer() + 5
while timer() < deadline:
......... #run this for 5 seconds
否則,請參閱如何在Python中限制函數調用的執行時間 。
我假設你想重復整個功能,直到時間到了,而不是試圖在時間中途中斷功能(這將更加困難)。 一個很好的解決方案是使用裝飾器:
import time
def repeat(func):
def inner(*args, **kwargs):
if 'repeat_time' in kwargs:
stop = kwargs.pop('repeat_time') + time.time()
while time.time() <= stop:
func(*args, **kwargs)
else:
func(*args, **kwargs)
return inner
@repeat
def my_func():
# ...
my_func() # calls my_func once
my_func(repeat_time=10) # repeatedly calls my_func for 10 seconds
此代碼假定您不希望對my_func
的返回值執行任何my_func
,但可以輕松調整以收集返回值,以防您執行此操作。
或者如果您不需要將任何參數傳遞給my_func
, my_func
:
def repeat_for(seconds, func):
stop = seconds + time.time()
while time.time() <= stop:
func()
def my_func():
# ...
repeat_for(10, my_func)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.