如何流向单管(而不是串联)

2024-07-08 16:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

考虑以下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,它似乎配备了排水管和其他必要的接口

如果我试着把它传给我自己,我会得到:

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

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

    with _registryActive(_tubeRegistry):
        ...

…使适当的工厂(即_tube2drain)在上下文中可用

所以,如果我想流入(或流出)一个tube,我应该自己调用_tube2drain的某个变体吗


Tags: valuemaindefunixflowendpointseriesipc

热门问题