如何流到单个管(而不是一个管)

时间:2019-02-27 00:04:52

标签: python twisted glyph tubes

这可能根本不是问题,而是我对底层接口模式的误解。

请考虑以下tube

@tube
class Capitalizer:
    def received(self, value):
        yield value.upper()

...然后以这种方式打开流程:

@inlineCallbacks
def main(reactor, listenOn="unix:path=trying-tubes"):
    endpoint = clientFromString(reactor, listenOn)
    ipc_flow = yield flowFromEndpoint(endpoint)
    c = Capitalizer()
    ipc_flow.fount.flowTo(c)
    yield Deferred()

我得到: builtins.AttributeError: 'Capitalizer' object has no attribute 'flowStopped'

好,所以看来我没有正确实现tube接口。

如果我将其用作系列:

@inlineCallbacks
def main(reactor, listenOn="unix:path=trying-tubes"):
    endpoint = clientFromString(reactor, listenOn)
    ipc_flow = yield flowFromEndpoint(endpoint)
    c = Capitalizer()
    s = series(c)
    ipc_flow.fount.flowTo(s)
    yield Deferred()

...这很好。

因此,在series()中查看时,我发现它在我的电子管上调用了IDrain,似乎为它配备了排水管和其他必要的接口。

如果我自己尝试将其传递给IDrain,则会得到:

builtins.TypeError: ('Could not adapt', <__main__.Capitalizer object at 0x7fda958b8b70>, <InterfaceClass tubes.itube.IDrain>)

这似乎是因为series中的上下文管理器显示为:

    with _registryActive(_tubeRegistry):
        ...

...在上下文中提供适当的工厂(即_tube2drain)。

因此,如果我想只流入(流出)单个_tube2drain,我是否应该给自己打电话tube的某个变体?

0 个答案:

没有答案