python - 一个干净、轻量级的 Python 扭曲替代品?

标签 python networking twisted asynchronous

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




不久前,我写了一个 web-spider,我对它进行了多线程处理,以使并发请求能够同时发生。那是在我的 Python 青年时期,在我知道 GIL 之前的日子里以及它为多线程代码创建的相关问题(即,大多数情况下,东西都以序列化结束!)...

我想重新编写此代码以使其更健壮并性能更好。基本上有两种方法可以做到这一点:我可以使用新的 multiprocessing module在 2.6+ 中,或者我可以使用某种 react 器/基于事件的模型。我宁愿做后者,因为它更简单,更不容易出错。

因此,问题涉及哪种框架最适合我的需求。以下是我目前所知道的选项列表:

  • Twisted : Python reactor 框架的鼻祖:不过看起来很复杂而且有点臃肿。小任务的陡峭学习曲线。
  • Eventlet : 来自 lindenlab 的人.面向此类任务的基于 Greenlet 的框架。不过我看了一下代码,它不是太漂亮:不符合 pep8,散落着打印(为什么人们在框架中这样做!?),API 似乎有点不一致。
  • PyEv : 不成熟,现在似乎没有人使用它,尽管它基于 libevent,所以它有一个可靠的后端。
  • asyncore :来自标准库:über 低级,似乎只是为了使某些东西起步而涉及很多跑腿工作。
  • tornado :虽然这是一个面向服务器的产品,旨在为动态网站提供服务器,但它确实具有 async HTTP client和一个简单的 ioloop .看起来它可以完成工作,但不是它的目的。
    [编辑:不幸的是,它不能在 Windows 上运行,这对我来说很重要 - 这是我支持这个蹩脚平台的要求]

  • 有什么我错过的吗?肯定有一个库适合简化的异步网络库的最佳位置!

    [编辑:非常感谢 intgr因为他指向 this page .如果你滚动到底部,你会看到一个非常好的项目列表,旨在以一种或另一种方式解决这个任务。实际上,自 Twisted 成立以来,事情确实发生了变化:人们现在似乎更喜欢 co-routine基于解决方案,而不是传统的 react 器/回调导向的解决方案。这种方法的好处是代码更清晰更直接:我过去肯定发现过,尤其是在使用 boost.asio 时。在 C++ 中,基于回调的代码可能导致设计难以遵循,并且对于未经训练的眼睛来说相对模糊。使用协同程序可以让您编写至少看起来更同步的代码。我想现在我的任务是找出我喜欢这些库中的哪一个并试一试!很高兴我现在问...]

    [编辑:任何关注或偶然发现此问题或在任何意义上关心此主题的人都可能感兴趣:我发现了一篇关于 the available tools 当前状态的非常棒的文章|对于这份工作]

    最佳答案

    Twisted 很复杂,你是对的。扭曲不臃肿。

    如果你看这里:http://twistedmatrix.com/trac/browser/trunk/twisted你会发现一个有组织的、全面的、经过充分测试的互联网协议(protocol)套件,以及用于编写和部署非常复杂的网络应用程序的帮助代码。我不会将膨胀与全面性混淆。

    众所周知,Twisted 文档乍一看并不是对用户最友好的,我相信这会让很多不幸的人望而却步。但如果你花时间,扭曲是惊人的(恕我直言)。我做到了,事实证明这是值得的,我建议其他人也尝试一下。

    关于python - 一个干净、轻量级的 Python 扭曲替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1824418/

    相关文章:

    python - 如何从Python代码与Erlang代码进行通信?

    python - 何时使用线程以及使用多少线程

    php - Ubuntu iptable 搞砸 file_get_contents()

    python - Twisted ExtendSelected Reactor 错误

    python - 如何避免扭曲的 tac 文件中出现导入错误?

    python - 使用就地排序的 QuickSort

    python - 按月和日过滤 django 日期时间字段的问题

    networking - Docker CNI:无法设置网络

    java - 创建客户端-服务器应用程序以回显用户发送的内容

    Python Twisted JSON RPC