python - Twisted 有什么了不起的?

标签 python comparison twisted

我越来越多地听说 Python 的 Twisted框架岩石和其他框架相形见绌。

任何人都可以对此有所了解,并可能将 Twisted 与其他网络编程框架进行比较。

最佳答案

Twisted 有很多不同的方面你可能会觉得很酷。

Twisted 包含大量的协议(protocol)实现,这意味着您很可能会有一个 API 可以用来与某个远程系统(大多数情况下是客户端或服务器)进行通信 - 无论是 HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP/Jabber , telnet, SSH , SSL, NNTP , 或 真正 模糊的协议(protocol)之一,如 Finger 或 ident,或较低级别的协议(protocol)构建协议(protocol)之一,如 DJB's netstrings , simple line-oriented protocols ,甚至是 Twisted 的自定义协议(protocol)之一,如 Perspective Broker (PB)Asynchronous Messaging Protocol (AMP) .

关于 Twisted 的另一个很酷的事情是,在这些低级协议(protocol)实现之上,您通常会发现一个更易于使用的抽象。例如,在编写 HTTP 服务器时,Twisted Web 提供了 a "Resource" abstraction它允许您从 Python 对象中构建 URL 层次结构,以定义如何响应请求。

所有这些都与合作的 API 绑定(bind)在一起,主要是因为这些功能都不是通过网络阻塞来实现的,所以你不需要启动 a thread for every operation you want to do .这有助于人们通常将其归因于 Twisted 的可伸缩性(尽管它是一种只涉及一台计算机的可伸缩性,而不是让您的应用程序增长到使用整个主机集群的那种可伸缩性),因为 Twisted 可以处理数千个单个线程中的连接,这往往比拥有数千个线程,每个线程用于单个连接更好。

避免线程化也有利于测试和调试(因此一般来说是可靠性)。由于在典型的基于 Twisted 的程序中没有抢先式上下文切换,因此您通常无需担心锁定问题。取决于不同网络事件发生顺序的竞争条件可以通过模拟这些网络事件轻松进行单元测试(而模拟上下文切换不是大多数(任何?)线程库提供的功能)。

Twisted 也是真的,真的 concerned with quality .所以你会rarely find regressions在 Twisted 版本中,大多数 API 都可以正常工作,即使您没有以常用方式使用它们(因为我们尝试测试您可能使用它们的所有方式,而不仅仅是常用方式)。对于过去 3 或 4 年添加到 Twisted(或修改)的所有代码来说尤其如此,因为从那时起 100% 的线路覆盖率一直是最低测试要求。

Twisted 另一个经常被忽视的优势是它十年来探索不同的平台 quirks .在不同的平台上有很多未记录的套接字错误,很难知道它们甚至存在,更不用说处理它们了。 Twisted 已经逐渐涵盖了越来越多的这些,并且在这一点上已经相当不错了。较年轻的项目没有这种经验,因此他们错过了可能只会发生在您发布的任何项目的用户身上的模糊失败模式,而不是发生在您身上。

总而言之,我觉得 Twisted 最酷的地方在于它是一个非常无聊的库,它让我可以忽略很多非常无聊的问题,而只专注于有趣和有趣的事情。 :)

关于python - Twisted 有什么了不起的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5458631/

相关文章:

python - 使用 OR 根据两列过滤数据框

python - 二进制掩码之间的关键点检测和匹配

python - 从命令提示符运行单元测试

Ruby nil 转换为_date

java - Playframework 和 Django

Python3 - 解析jpeg维度信息

javascript - Python中的 'is'关键字和JS中的===关键字一样吗?

python - 扭曲的未处理错误

python - 用于允许断开连接的仅发送协议(protocol)的扭曲客户端

python - 沃克尔资源