【问题标题】:Could someone explain to me python-twisted like I'm five?有人可以像我五岁一样向我解释蟒蛇扭曲吗?
【发布时间】:2012-03-08 11:06:35
【问题描述】:

我已阅读文档。我玩过例子。但是我仍然无法理解异步在有用时究竟意味着什么,以及很多人似乎如此疯狂的魔法在哪里?

如果只是为了避免等待I/O,为什么要简单地在线程中运行呢?为什么需要延迟?

我认为我缺少一些关于计算的基本知识,所以这些问题。如果是这样,那是什么?

【问题讨论】:

  • 线程有开销,在线程中等待仍然会消耗 CPU/内存。另外还有同步问题。
  • 有一个著名的关于不同 I/O 策略的解释和比较,称为C10K
  • @Dikei 为什么在异步情况下会避免这种开销?您仍然需要等待和存储程序数据,不是吗?
  • Dvir Volk 已经在下面解释过 :)

标签: python multithreading asynchronous twisted


【解决方案1】:

就像你五岁一样……好吧:线程不好,异步好!

现在,说真的:线程会产生开销——无论是在解释器的锁定和切换方面,还是在内存消耗和代码复杂性方面。当您的程序是 IO 绑定的,并且需要大量等待其他服务(API、数据库)返回响应时,您基本上是在等待空闲,并浪费资源。

异步 ​​IO 的重点是在保持并发性的同时减轻线程的开销,并保持程序简单,避免死锁并降低复杂性。

以聊天服务器为例。您在服务器上有数千个连接,并且您希望某些人根据他们所在的房间接收一些消息。使用线程执行此操作将比异步方式执行此操作复杂得多。

re deferred - 这只是简化代码的一种方式,而不是给每个函数一个回调,以便在它等待的操作准备好时返回。

另一个注意事项 - 如果您想要一个更简单和优雅的异步 IO 框架,请尝试使用 tornado,它基本上是一个异步 Web 服务器,带有异步 http 客户端和 deferred 的替代品。它写得非常好,可以用作通用异步 IO 框架。

http://tornadoweb.org

【讨论】:

  • Tornado 没有 Deferred 的替代品。它在每个呼叫站点都有手动回调传递。这就是 Deferred 的替代品。
  • 不,tornado 有一个新的库可以让你做到这一点。 tornadoweb.org/documentation/gen.html
  • 哇...这几乎就像twistedmatrix.com/documents/current/api/…,但更糟。
  • 我真的不明白龙卷风(或 cyclone.io)的炒作。蟒蛇时髦的方式?一旦你习惯了延期就可以了。
  • 我从来没有将 tornado 仅仅用作一个 IO 框架,但我可以告诉你,构建一个网络服务器并在应用程序中使用它的 http 客户端 - 它很牛逼。 API简单,学习曲线非常小,twisted我就不好说了。
猜你喜欢
  • 2014-03-16
  • 2018-03-27
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2015-12-17
相关资源
最近更新 更多