我是新手,我试图理解异步编程的设计模式,特别是扭曲。从设计的角度来看,从协议子类访问反应器是一个好主意,如下所示:
class A(Protocol):
def __init__(self):
reactor.callLater(5, function_not_defined_here)
答案 0 :(得分:3)
是的,这绝对是标准的。您可以从应用程序的任何位置调用reactor方法(前或发布reactor.run()
)。唯一的例外是使用线程时,在这种情况下,您需要在reactor.callFromThread()
中包装您的reactor方法调用,例如:
reactor.callFromThread(reactor.callLater, 5, function_not_defined_here)
答案 1 :(得分:2)
您可以考虑对此进行一些调整:
reactor
作为参数。这使您的代码更容易测试,因为这意味着您可以在单元测试中传入一个独立于实时的假反应堆,并且可以进行检查以验证A
的行为是否符合预期。reactor.callLater
的结果。将其另存为A
实例上的属性,以便以后可以在必要时使用它。例如,您可能想要取消它(考虑A
实例在延迟调用运行之前失去连接的情况。)reactor.callLater
。相反,请在A.__init__
中调用它。这个有点依赖于你为什么要使用延迟调用,但更有可能的是你想在建立连接后的某个时间做某事,而不是在实例化协议之后的某个时间。这也让你有一个A.connectionMade
实例,它没有搞乱反应堆(这是你可能想要在单元测试中做的另一件事)。