【问题标题】:Twisted and easy plugin development扭曲而简单的插件开发
【发布时间】:2013-07-18 11:50:39
【问题描述】:

我正在创建这个应用程序,我正在考虑使用 Twisted 通过 XMPP(Jabber,聊天协议)与用户进行通信,将来也可能使用其他通信方式。我的应用程序旨在支持,或者更确切地说,依赖于(独立开发的)插件。大多数插件将大部分时间花在 I/O 上。理想情况下,所有插件都会对所有 I/O 使用 Deferreds 并立即返回(即非阻塞),但我担心要求插件开发人员这样做是一个太大的负担,并且会减慢并阻止插件 -发展。阻塞高级库更为常见(想想 Facebook 或 Twitter 库),并且在开发一个简单的 10 loc Twitter 库之前要求一个可能不是很好的编码人员阅读 Deferreds 听起来不像我想做的事情.

Twisted 文档声明 threadPool 的最大默认大小为 10,我应该“在大幅改变线程池大小之前小心了解线程及其资源使用情况”,我认为我不会这样做(理解),所以给每个插件一个自己的线程似乎也不是一个好主意。

有什么建议吗?

感谢您的帮助。

[编辑] 应用程序的独立(非服务器)版本也将可用。大多数插件开发人员可能会使用独立版本。这就是为什么我担心开发人员会选择简单的出路,并创建阻塞插件。

【问题讨论】:

    标签: python asynchronous twisted


    【解决方案1】:

    不要使用线程。

    对于不熟悉 Twisted 的人来说,如何让事情变得简单的最好例子是 Scrapy 定义 its plugin interfaces 的方式。您永远不会查看 reactorDeferred 或任何东西 - 您只需定义当某些页面被抓取时要做什么,作为回调。

    或者,不要太担心它。有plenty of independently developed 协议支持插件直接使用Twisted API;在实现传输协议的层面上,大多数能有效地做到这一点的人学习 Twisted 是没有问题的。

    【讨论】:

    • 感谢您的回复(对我迟到的回复感到抱歉!)。与其说是开发人员不了解 Deferreds(尽管这也是一个正确的观点),不如说是开发人员无法使用大多数阻塞的高级网络库。希望开发 Facebook 插件的开发人员不能使用任何现有库(OAuth/Graph API),因此他们很可能只会创建仅适用于独立版本而不是服务器的阻塞插件,我想避免这种情况。
    • 最好只对现有库施加压力以制作事件驱动版本。首先,这并不难;其次,99% 的实现可以在阻塞和事件驱动版本之间共享,第三,服务器(必须处理大量连接)和客户端(必须处理用户或网络输入)的性能特征更好任何时候)。此外,据我发现,库作者非常愿意为他们的用户提供便利,因此请尝试仅要求一些 OAuth 或图形 API 库来添加 Twisted 支持!
    猜你喜欢
    • 1970-01-01
    • 2014-08-17
    • 2011-11-03
    • 1970-01-01
    • 2022-12-03
    • 2017-10-27
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多