有可能这根本不是问题,而是我自己对底层接口模式的误解
考虑以下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
的某个变体吗
目前没有回答
相关问题 更多 >
编程相关推荐