6

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

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

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

  1. 是否应该使用 Twisted 编写新的网络代码(小型命令行工具除外)?
  2. 你会在同一个项目中混合使用 Twisted、http2lib 或 socket 代码吗?
  3. Twisted pythonic 是否适用于大多数库(它比替代品更复杂,引入对非标准包的依赖......)?

编辑:请让我换一种说法。您是否觉得使用 Twisted 编写新的库代码可能会阻碍其采用?Twisted 具有明显的优势(尤其是 gimel 所述的可移植性和可扩展性),但它不是核心 python 库这一事实可能被某些人认为是一个缺点。

4

2 回答 2

5

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

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

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