2015-08-13 52 views
1

在3.1.0电路中,是否有一种方法可以在运行时为处理程序设置通道? 一个有用的替代方法是在运行时添加一个处理程序并指定通道。在运行时添加/更改处理程序的通道

我检查了Manager.addHandler的实现,但无法使其工作。我试过了:

self._my_method.__func__.channel = _my_method_channel 
self._my_method.__func__.names = ["event name"] 
self.addHandler(self._my_method) 

回答

0

是的,但它不是真正公开的API。

实施例:在运行时创建事件处理程序的)

@handler("foo") 
def on_foo(self): 
    return "Hello World!" 


def test_addHandler(): 
    m = Manager() 
    m.start() 

    m.addHandler(on_foo) 

这是从tests.core.test_dynamic_handlers

NB采取:BaseComponent/Component亚类也是Manager一个子类,并有.addHandler().removeHandler()方法。您还可以设置@handler()动态如下:

def on_foo(...): 
    ... 

self.addHandler(handler("foo")(on_foo)) 

你也可以看到这是一个很好的例如在图书馆本身circuits.io.process我们动态地创建用于标准输入,输出和错误事件处理程序。

+0

太棒了!谢谢。为了完整起见,我必须说这些工作只与自由函数(和类似)一起工作,而不是实例方法(当然,这可以通过使用lambda来工作) –

+0

是的; ''.addHandler()''需要用''handler()''装饰的函数,然后将其绑定到组件。 –

相关问题