2016-05-06 143 views
0

我想每5秒運行一次函數。 此代碼將工作:Python每5秒鐘運行一次函數,使用前次嘗試的信息

import threading 
def notify(): 
    threading.Timer(5.0, notify).start() 

notify() 

如果該功能需要從以前的運行參數? 我嘗試這樣做:

import threading 
def notify(since): 
    threading.Timer(5.0, notify(since)).start() 
# initial_id is just an integer, eg 423455677 
notify(initial_id) 

我得到錯誤:

Traceback (most recent call last): 
File "/Users/paulyu/anaconda/lib/python3.4/threading.py", line 911, in _bootstrap_inner 
self.run() 
File "/Users/paulyu/anaconda/lib/python3.4/threading.py", line 1177, in run 
self.function(*self.args, **self.kwargs) 
TypeError: notify() missing 1 required positional argument: 'since' 

豪解決? 您的建議非常感謝。 謝謝 保羅

+0

您的輸入和錯誤不相關。什麼是因爲應該是? –

+0

這只是我獲得通知功能的一個號碼。對於第一次運行,我將一個數字作爲參數傳遞給notify(),該數字由其他函數檢索。 –

+0

你的第二個例子顯示了你自*參數以來沒有*的通知,你實際上想要實現什麼? –

回答

0

當你需要記住某種狀態,你通常想要一個類。

import threading 

class Notifier: 

    def __init__(self, since): 
     self.since = since 

    def notify(self): 
     print(self.since) 
     self.since += 1 
     threading.Timer(2.0, self.notify).start() 

Notifier(123).notify() 
+0

雖然這段代碼可能會回答這個問題,但最好包含一些上下文,解釋它的工作原理以及何時使用它。從長遠來看,僅有代碼的答案是沒有用的。 – Bono

+0

@Bono更好嗎?沒有什麼可以解釋的。 –

+0

@Alex謝謝!我創建了這個類並對其進行了測試。工作得很好。這是我第一次使用課堂。開始瞭解何時以及爲何使用它。 :) –