我正在编写一个简单的网站蜘蛛,我决定借此机会学习Python中并发编程的新功能。我决定尝试别的东西,而不是使用线程和队列,但我不知道什么适合我。
我听说过Stackless,Celery,Twisted,Tornado等等。我不想设置一个数据库和Celery的所有其他依赖项,但如果它非常适合我的目的,我会这样做。
我的问题是:在我的应用程序的适用性和一般用途之间有什么良好的平衡?我已经看过Stackless中的tasklets但是我不确定urlopen()调用是否会阻塞或者它们是否会并行执行,我没有看到任何地方提到的那些。
有人可以给我一些关于我的选择的细节以及最适合使用的内容吗?
感谢。
答案 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页面示例,
依赖),但它可以帮助。