簡體   English   中英

如何使函數在特定時間段內運行?

[英]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_funcmy_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM