A(长)以前我写了一个网络蜘蛛,我多线程,以使并发请求同时发生。这是在我的Python青年,在我知道
GIL和它为多线程代码(IE,大多数时间的东西最终序列化之前创建的相关联的困难的日子之前的日子…)
我想重新编写这段代码,使其更强大,性能更好。基本上有两种方法可以做到这一点:我可以在2.6中使用新的multiprocessing module,或者我可以去某种反应器/基于事件的模型。我宁愿做后,因为它更简单,更不容易出错。
所以问题涉及什么框架将最适合我的需要。以下是我知道的选项到目前为止的列表:
> Twisted:Python反应器框架的granddaddy:似乎复杂,有点。肿。陡峭的学习曲线为一个小任务。
> Eventlet:从lindenlab的家伙。基于Greenlet的框架,面向这些类型的任务。我看看代码虽然,它不是太漂亮:非pep8兼容,分散与打印(为什么人们做这个框架!),API似乎有点不一致。
> PyEv:不成熟,似乎没有人现在使用它,虽然它是基于libevent所以它有一个坚实的后端。
> asyncore:从stdlib:über低级,似乎很多legwork涉及只是为了让事情离开地面。
> tornado:虽然这是一个面向服务器的产品,旨在服务器动态网站,它的功能有一个async HTTP client和一个简单的ioloop.看起来它可以完成工作,但不是它的目的。
[编辑:不在Windows上运行不幸的是,它计数了我 – 它的要求我支持这个跛脚平台]
有什么我错过了吗?当然必须有一个图书馆,适合简化的异步网络库的甜点!
[编辑:大感谢intgr他的指针this page.如果你滚动到底部,你会看到一个非常好的项目列表,旨在解决这种任务的方式或另一种。实际上,自从Twisted诞生以来,事情确实发生了变化:人们现在似乎倾向于基于co-routine的解决方案,而不是传统的反应器/回调方案。这种方法的好处是更清晰更直接的代码:我确定发现在过去,特别是在使用boost.asio在C,基于回调的代码可以导致设计,可能是难以遵循,并相对不明确的未经训练眼。使用协同例程允许你编写看起来更加同步的代码。我想现在我的任务是找出这些许多图书馆中的哪一个我喜欢的外观,并给它一个去!很高兴我问现在…]
[编辑:可能感兴趣的任何人谁跟随或绊住这个问题或关心这个话题在任何意义:我发现一个真正伟大的写的目前的状态the available tools这项工作]