在运行时为处理程序添加/更改通道

时间:2015-08-13 22:49:05

标签: python circuits-framework

在电路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)

1 个答案:

答案 0 :(得分: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在库本身中看到良好的示例,其中我们为stdin,stdout和stderr动态创建事件处理程序。