【问题标题】:What are my options for doing multithreaded/concurrent programming in Python?在 Python 中进行多线程/并发编程有哪些选择?
【发布时间】:2010-02-12 01:43:11
【问题描述】:

我正在编写一个简单的站点爬虫,我决定借此机会学习 Python 并发编程方面的新知识。我决定尝试其他方法,而不是使用线程和队列,但我不知道哪种方法适合我。

我听说过 Stackless、Celery、Twisted、Tornado 和其他东西。我不想设置数据库和 Celery 的所有其他依赖项,但如果它适合我​​的目的,我会这样做。

我的问题是:我的应用程序的适用性和总体实用性之间的良好平衡是什么?我已经查看了 Stackless 中的 tasklet,但我不确定 urlopen() 调用是否会阻塞或者它们是否会并行执行,我还没有看到任何地方提到过。

谁能给我一些关于我的选择的详细信息以及最好使用什么?

谢谢。

【问题讨论】:

  • celery 不需要数据库,但它需要 RabbitMQ(Django ORM 支持的数据库)或 Redis。 RabbitMQ 是首选选项。虽然 celery 对分布式计算绝对有用,但它的主要目的是为网站排队异步任务。你可以在你的程序中使用 celery 作为一个选项,如果启用它会增加并行化。或者,如果您有大量数据要分析,也许您应该研究一下 Hadoop?

标签: python multithreading concurrency parallel-processing python-stackless


【解决方案1】:

Tornado 是一个 Web 服务器,因此它对您编写蜘蛛程序没有多大帮助。 Twisted 更加通用(并且不可避免地复杂),适用于各种网络任务(并且与多个 GUI 框架的事件循环很好地集成)。实际上,曾经有一个 twisted.web.spider(但它在几年前就被删除了,因为它没有被维护——所以你必须在 Twisted 提供的设施之上自行开发)。

【讨论】:

    【解决方案2】:

    我必须说 Twisted 得到了我的投票。

    在 Twisted 中执行事件驱动任务相当简单。与 GTK+ 和 DBus 等其他重要系统组件的集成非常容易。

    HTTP 客户端支持目前是基本的,但正在改进 (>9.0.0):see related question。

    额外的好处是 Twisted 在 Ubuntu 默认存储库中可用;-)

    【讨论】:

    • 嗯,我看到了,它看起来很有趣,显然我可以触发 N 个请求并让每个回调再触发一个,这将(希望)保持请求的数量不变。谢谢!
    • 这是我在 Twisted 上的“搜索 wiki 笔记”:google.ca/…
    【解决方案3】:

    要快速查看包装尺寸,请参阅 ohloh.net/p/compare .
    当然,源大小只是一个粗略的指标(我真正想要的是 nr pages doc,nr pages examples, 依赖项),但它可以提供帮助。

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 1970-01-01
      • 2021-05-21
      • 2014-03-02
      • 2011-01-18
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多