我在下面定义了TaskTimer类,我想在触发事件时执行多个函数,这些函数可能有争论,也可能没有争论。我想想出一个通用的方法。我的职能没有得到执行,我不明白为什么。我在t.start()中的论点有误吗?在
import System
from System.Timers import (Timer, ElapsedEventArgs)
class TaskTimer(object):
def __init__ (self):
self.timer = Timer ()
self.timer.Enabled = False
self.handlers =[]
def On_Timed_Event (self,source, event):
print 'Event fired', event.SignalTime
for handler in self.handlers:
handler(*self.my_args,**self.kwargs)
def start(self,interval, repeat, *args, **kwargs):
self.repeat = repeat
self.run = True #True if timer is running
self.timer.Interval= interval
self.timer.Enabled = True
self.my_args= args
self.kwargs = kwargs
for x in self.my_args:
self.handlers.append(x)
self.timer.Elapsed += self.On_Timed_Event
def func1(a,b):
print 'function 1. this function does task1'
print '1...1...1...'
return None
def func2(d):
print 'Function 2. This function does something'
print '2...2...2...'
return None
def func3(a,b,c):
print 'function 3. This function does something else'
return None
def main():
t= TaskTimer()
D= {'fun2':'func2', 'arg2':'3'}
t.start(5000,False,func1, func2, func3, a= 1, b=3, c=4, d=D)
if __name__ == '__main__':
main()
我正在进行实验,因此我编辑了def_Timed_Event函数和func1、func2和func3,如下所示。我还按照@Ewan的建议在函数中添加了print语句。Python是否自动替换来自**自我夸克?在
^{pr2}$代码在IronPython控制台中运行。 ![IronPython_控制台][2]
[2]: http://i.stack.imgur.com/vYW0S.jpg
首先,我可以看到你在这条线路上遇到了麻烦:
handler(*self.my_args,**self.kwargs)
由于您不接受}中的任何额外的
func1
、func2
或{kwargs
,如果它到达他们那里,我希望看到以下内容:就我个人而言,我会放入一些不错的日志记录/调试语句,以找出程序在堆栈中的位置。在
self.timer.Elapsed += self.On_Timed_Event
?timer.Elapsed
值上添加一个时间,但是self.On_Timed_Event
没有返回任何内容On_Timed_Event
接受2个参数(source, event
),但是您似乎没有传入它们,这也会导致程序失败。在stdout
中看到了Event fired
,还是程序根本没有到达{System.Timers
代码中存在问题。在相关问题 更多 >
编程相关推荐