扭曲和简单的插件开发

时间:2013-07-18 11:50:40

标签: python asynchronous twisted

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

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

有什么建议吗?

感谢您的帮助。

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

1 个答案:

答案 0 :(得分:2)

不要使用线程。

如何为不熟悉Twisted的人提供便利的最佳示例是Scrapy定义its plugin interfaces的方式。您永远不会看reactorDeferred或其他任何内容 - 您只需定义在删除某些网页时要执行的操作,作为回调。

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