簡體   English   中英

Python For循環列表,每5分鍾運行一次

[英]Python For Loop List, Function Every 5min

matches = []
done = []
for item in matches:
    dofunctioneveryloop()
    done.extent(item)
    dofunctiononce5min()

如何在此循環內每5分鍾執行一次dofunctiononce5min()? 這是備份到文件的功能嗎?

不確定我是否理解這個問題。 我假定您希望此函數每五分鍾執行一次,而不管它真正被調用的頻率如何。

這可能是矯kill過正,但是為什么不使用裝飾器呢? 這將為“裝飾”功能創建一個新功能,如果自上次執行以來已過X秒,則將執行原始功能。 這將確保該函數每5分鍾(或傳遞給裝飾器的時間間隔以秒為單位)執行一次,無論是在該循環中還是在其他位置調用。

import time

def onceEveryXSeconds(seconds):             # this creates the decorator
    def wrapper(f):                         # decorator for given 'seconds'
        f.last_execution = 0                # memorize last execution time
        def decorated(*args, **kwargs):     # the 'decorated' function
            if f.last_execution < time.time() - seconds:
                f.last_execution = time.time()
                return f(*args, **kwargs)
        return decorated
    return wrapper

用法:

@onceEveryXSeconds(3)
def function(foo):
    print foo

while True:
    print "loop"
    function("Hello again")
    time.sleep(1)

輸出,帶有@onceEveryXSeconds(3)

loop
Hello again
loop
loop
loop
Hello again
loop
...

不建議您這樣做。 最好的方法也許是在操作系統上調度它,並定期運行它。

無論如何,如果要每x次運行一條語句,這是一個示例

import time

for i in range(5):
    print i
    time.sleep(3) # seconds

作為參數的時間應小數,例如0.5秒。

假設循環花費的時間超過五分鍾,則可以使用time.time()確定何時結束了5分鍾。

import time

matches = []
done = []
starttime = time.time()
for item in matches:
    dofunctioneveryloop()
    done.extent(item)
    if time.time() - starttime  > 300:  
        dofunctiononce5min()
        starttime = time.time()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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