在Python中进行多线程/并发编程有哪些选择?

时间:2010-02-12 01:43:12

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

我正在编写一个简单的网站蜘蛛,我决定借此机会学习Python中并发编程的新功能。我决定尝试别的东西,而不是使用线程和队列,但我不知道什么适合我。

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

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

有人可以给我一些关于我的选择的细节以及最适合使用的内容吗?

感谢。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

如需快速查看包装尺寸,请参阅 ohloh.net/p/compare
当然源大小只是一个粗略的指标(我真正喜欢的是nr页面doc,nr页面示例, 依赖),但它可以帮助。