Twisted是httplib2 / socket的替代品吗?

时间:2009-05-11 06:30:45

标签: python networking sockets twisted httplib2

许多python库,即使是最近编写的,也使用httplib2或套接字接口来执行网络任务。

由于它们的阻塞特性,这些代码显然比Twisted更容易编码,但我认为将它们与其他代码(尤其是GUI代码)集成时这是一个缺点。如果你想要可扩展性,并发性或GUI集成,同时避免多线程,那么Twisted是一个自然的选择。

所以我会对这些问题的意见感兴趣:

  1. 是否应使用Twisted?
  2. 编写新的网络代码(小命令行工具除外)
  3. 你会在同一个项目中混合使用Twisted,http2lib或socket代码吗?
  4. 对于大多数库而言是扭曲的pythonic(它比替代品更复杂,对非标准包引入依赖...)
  5. 编辑:请让我用另一种方式说出来。您是否觉得使用Twisted编写新的库代码可能会增加其采用的障碍? Twisted有明显的好处(特别是gimel所说的可移植性和可伸缩性),但它不是一个核心python库的事实可能会被一些人视为缺点。

2 个答案:

答案 0 :(得分:5)

请参阅asychronous-programming-in-python-twisted,您必须决定是否符合非标准(外部)库以满足您的需求。请注意@Glyph的答案,他是Twisted项目的创始人,可以权威地回答任何Twisted相关问题。

  

在像Twisted这样的库的核心,主循环中的函数不是睡眠,而是像select select模块这样的模块公开的操作系统调用,如select()或poll()。我说“喜欢”选择,因为这是一个在平台之间变化很大的API,几乎每个GUI工具包都有自己的版本。 Twisted目前为此主题提供了14种不同变体的抽象界面。这种API提供的常见问题是提供一种说法“这是我正在等待的事件列表。进入睡眠直到其中一个发生,然后醒来并告诉我它们是哪一个。 “

答案 1 :(得分:0)

  1. 是否应使用Twisted编写新的网络代码(小命令行工具除外)?
    • 也许。这真的取决于。有时它很容易将阻塞调用包装在自己的线程中。 Twisted适用于大规模网络代码。
  2. 你会在同一个项目中混合Twisted,http2lib或socket代码吗?
    • 不确定。但请记住,Twisted是单线程的,并且Twisted中的任何阻塞调用都将阻止整个引擎。
  3. 对于大多数库而言是扭曲pythonic(它比替代品更复杂,对非标准包引入依赖...)?
    • 有许多Twisted狂热者会说它属于Python标准库。但是很多人可以使用asyncore / asynchat实现合适的网络代码。