标签: twisted

一个干净,轻量级的替代Python的扭曲?

很久以前我写了一个我多线程的网络蜘蛛,以便同时发生并发请求.那是在我的Python青年时代,在我知道GIL及其为多线程代码创建的相关问题之前的几天(IE,大多数时候东西最终都被序列化了!)......

我想重做这段代码,使其更强大,性能更好.我基本上有两种方法可以做到这一点:我可以在2.6+中使用新的多处理模块,或者我可以选择某种类型的基于反应器/事件的模型.我宁愿做后者,因为它更简单,更不容易出错.

所以问题涉及哪种框架最适合我的需求.以下是我目前了解的选项列表:

  • Twisted:Python反应器框架的祖父:看起来很复杂而且有点臃肿.小任务的陡峭学习曲线.
  • Eventlet:来自lindenlab的人.基于Greenlet的框架,适用于这些类型的任务.我看了一下代码,但它并不太漂亮:非pep8兼容,分散打印(人们为什么要在框架中执行此操作!?),API似乎有些不一致.
  • PyEv:不成熟,现在似乎没有人使用它虽然它基于libevent所以它有一个坚实的后端.
  • asyncore:来自stdlib:über低级别,看起来很多涉及到的事情只是为了得到一些实际的东西.
  • 龙卷风:虽然这是面向服务器的产品,旨在服务于动态网站,但它确实具有异步HTTP客户端和简单的ioloop.看起来它可以完成工作但不是它的目的.[编辑:不幸在Windows上运行,这对我来说很重要 - 这是我支持这个蹩脚平台的要求]

我有什么遗漏吗?当然必须有一个适合简化的异步网络库的最佳点的库!

[编辑:非常感谢intgr指向此页面的指针.如果你滚动到底部,你会看到有一个非常好的项目列表,旨在以某种方式解决这个任务.事实上,自Twisted开始以来事情确实已经发生了变化:人们现在似乎更倾向于基于协同例程的解决方案而不是传统的反应堆/回调导向解决方案.这种方法的好处是更清晰,更直接的代码:我在过去肯定发现过,特别是在C++中使用boost.asio时,基于回调的代码可能会导致难以理解的设计并且相对模糊不清未经训练的眼睛.使用协同例程允许您编写至少看起来更加同步的代码.我想我现在的任务是找出我喜欢的这些库中的哪一个,并试一试!很高兴我现在问...]

[编辑:也许对任何跟随或偶然发现这个问题或者在任何意义上关心这个话题的人都感兴趣:我发现了一个非常好的关于这个工作的可用工具的当前状态的文章]

python networking asynchronous twisted

219
推荐指数
10
解决办法
6万
查看次数

何时使用Tornado,何时使用Twisted/Cyclone/GEvent/other

哪些框架/库是构建现代多用户Web应用程序的最佳选择?我希望有一个异步的网络服务器,这将允许我轻松扩展.什么解决方案将提供最佳性能/可扩展性/最有用的框架(在易用性和易于开发方面)?

如果它能提供良好的功能(websockets,rpc,streaming等)会很棒.

每种解决方案的优缺点是什么?

python webserver twisted tornado gevent

181
推荐指数
4
解决办法
8万
查看次数

Twisted中的select/poll与epoll反应器的注意事项

我所阅读和体验过的所有东西(基于Tornado的应用程序)都让我相信ePoll是基于Select和Poll的网络的自然替代品,特别是对于Twisted.这让我变得偏执,对于更好的技术或方法而言,这是非常罕见的.

阅读epoll和替代品之间的几十个比较表明,epoll显然是速度和可扩展性的支柱,特别是它以线性方式扩展,非常棒.那说,处理器和内存利用率如何,epoll仍然是冠军?

networking scalability capacity-planning twisted

91
推荐指数
1
解决办法
2万
查看次数

Python扭曲:从哪里开始

我正在尝试开始学习扭曲的套接字服务器创建.我想添加一些有用的功能(如auth,也许还有其他一些功能).也许有人可以指点我一个很好的教程,这将帮助我开始(+也许一些其他的想法)

python twisted

83
推荐指数
2
解决办法
5万
查看次数

Twisted有什么好玩的?

我越来越多地听说Python的Twisted框架和其他框架比较苍白.

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

python comparison twisted

83
推荐指数
2
解决办法
4万
查看次数

事件驱动模型和反应堆模式有什么区别?

来自维基百科Reactor Pattern文章:

反应器设计模式是用于处理通过一个或多个输入同时传递给服务处理器的服务请求的事件处理模式.

它命名了几个例子,例如nodejs,twisted,eventmachine

但据我所知,上面是流行的事件驱动框架,所以让它们也成为反应堆模式框架?

如何区分这两个?或者他们是一样的?

events design-patterns twisted eventmachine

73
推荐指数
2
解决办法
2万
查看次数

尝试使用此代码在TLS上运行TLS时,为什么会出现握手失败?

我尝试使用twisted.protocols.tls一个使用内存BIO的OpenSSL接口来实现一个可以通过TLS运行TLS的协议.

我实现此作为协议封装器的是大多看起来像一个普通的TCP传输,但其具有startTLSstopTLS用于添加和去除分别TLS的层的方法.这适用于第一层TLS.如果我在"原生"Twisted TLS传输上运行它也可以正常工作.但是,如果我尝试使用startTLS此包装器提供的方法添加第二个TLS层,则会立即出现握手错误,并且连接最终会处于某种未知的不可用状态.

包装器和让它工作的两个帮助器看起来像这样:

from twisted.python.components import proxyForInterface
from twisted.internet.error import ConnectionDone
from twisted.internet.interfaces import ITCPTransport, IProtocol
from twisted.protocols.tls import TLSMemoryBIOFactory, TLSMemoryBIOProtocol
from twisted.protocols.policies import ProtocolWrapper, WrappingFactory

class TransportWithoutDisconnection(proxyForInterface(ITCPTransport)):
    """
    A proxy for a normal transport that disables actually closing the connection.
    This is necessary so that when TLSMemoryBIOProtocol notices the SSL EOF it
    doesn't actually close the underlying connection.

    All methods except loseConnection are proxied directly to the real transport.
    """ …
Run Code Online (Sandbox Code Playgroud)

ssl openssl twisted pyopenssl

66
推荐指数
2
解决办法
5132
查看次数

Node.js与Twisted有什么用例?

假设一组开发人员同样习惯于在服务器端编写Javascript,就像使用Python和Twisted一样,Node.js什么时候比Twisted更合适(反之亦然)?

javascript python twisted node.js

65
推荐指数
2
解决办法
2万
查看次数

线程与异步

我从这篇非常好的文章中读到了编程的线程模型与异步模型.http://krondo.com/blog/?p=1209

但是,文章提到了以下几点.

  1. 只要有I/O,异步程序就会通过在任务之间切换来超越同步程序.
  2. 线程由操作系统管理.

我记得通过在Ready-Queue和Waiting-Queue(以及其他队列之间)之间移动TCB来读取线程由操作系统管理.在这种情况下,线程不会浪费时间等待它们吗?

鉴于上述情况,异步程序相对于线程程序有什么优势?

asynchronous twisted

64
推荐指数
4
解决办法
5万
查看次数

为什么我们需要使用rabbitmq

当我们在Python中使用一个名为Twisted的更强大的网络框架时,为什么我们需要RabbitMQ.我试图理解为什么有人想要使用RabbitMQ.

你能提供一个使用RabbitMQ的场景或例子吗?

另外,我在哪里可以找到有关如何使用RabbitMQ的教程?

python django twisted rabbitmq

53
推荐指数
5
解决办法
2万
查看次数