作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 twisted(和 StarPy,它是 asterisk ami 的协议(protocol)实现)连接到 asterisk 服务器。应用程序在那里启动传出传真。我发现了一些关于我的问题的提示,但我不知道如何正确处理这个问题。
第一份传真已正确发送。
Problem is, if I call twisted for the second time, the application keeps hanging in main loop.
from starpy import manager
from twisted.internet import reactor
def main():
f = manager.AMIFactory(cUser, cPass)
print "Login"
df = f.login(cServer, cPort)
def onLogin(protocol):
print "Logoff again"
df = protocol.logoff()
def onLogoff( result ):
print "Logoff erfolgt"
reactor.stop()
return df.addCallbacks( onLogoff, onLogoff )
def onFailure( reason ):
print "Login failed"
print reason.getTraceback()
df.addCallbacks( onLogin, onFailure )
return df
if __name__ == "__main__":
reactor.callWhenRunning( main )
reactor.run(installSignalHandlers=0)
print "runned the first time"
reactor.callWhenRunning( main )
reactor.run(installSignalHandlers=0)
print "will never reach this point"
最佳答案
正如 iny 所说,您只需调用 reactor.run
即可完成所有工作。和 reactor.stop
.
如果我们考虑您发布的示例代码,我们会看到它采取了以下步骤:
def onLogoff( result ):
print "Logoff erfolgt"
reactor.stop()
reactor.run
返回,为您执行第 4 步扫清道路:
reactor.callWhenRunning( main )
reactor.run(installSignalHandlers=0)
onLogoff
可能会发生什么。像这样:
def onLogoff( result ):
print "Logoff erfolgt"
main()
onLogoff
在第二次断开连接后运行并开始第三次连接。但是,您可以使用
main
的参数来解决此问题。控制重启行为的函数。
main
函数并进入
__main__
中定义的回调堵塞。这是 Deferreds 强大功能的重要组成部分:它允许您在事件源的实现(在本例中为您的传真发送函数)和处理结果事件的代码(发送第二个传真,或退出,在这种情况下)。
关于twisted - 用twisted 连接两次——如何正确地做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1979112/
我是一名优秀的程序员,十分优秀!