【问题标题】:Handle SimpleXMLRPCServer calls and Asyncore.dispatchers events from the same event-loop处理来自同一事件循环的 SimpleXMLRPCServer 调用和 Asyncore.dispatchers 事件
【发布时间】:2011-10-26 06:27:49
【问题描述】:

如何处理来自同一个事件循环的 Asyncore.dispatcher(s) 和 SimpleXMLRPCServer 事件?

附:我已经知道你们中的一些人可能会为此推荐 Twisted,但 Twisted 的问题在于它对于我的需求来说有点太高级了。特别是,我通过覆盖依赖于计时器的 Asyncore.dispatcher.writable() 方法来进行 UDP 流控制。不确定这是否/如何在 Twisted 中可行。

【问题讨论】:

    标签: python event-handling twisted rpc asyncore


    【解决方案1】:

    您应该为此使用 Twisted :-)。您不能将SimpleXMLRPCServer 放入异步循环中;它是同步代码,预计会阻塞。

    使用 Twisted 进行流量控制,即使使用 UDP,也很容易。您的DatagramProtocol 可以在transport 属性上调用stopReading / stopWriting / startReading / startWriting 等方法,而不是覆盖writable() 之类的方法。这些方法可以看here

    【讨论】:

    • SimpleXMLRPCServer 使用异步 IO 进行读取,而写入是阻塞的。无论如何,虽然 Twisted 似乎是高级库,但它仍然可以做所有与低级 asyncore 相同的事情。我想我可以从 Twisted 的 FileDescriptor 继承来获得低级 IO 功能或使用 Twisted Prodcuers。后一种选择甚至似乎是更好的解决方案。谢谢。
    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多