2016-05-06 109 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谢谢!我创建了这个类并对其进行了测试。工作得很好。这是我第一次使用课堂。开始了解何时以及为何使用它。 :) –