比较多处理与扭曲的问题

时间:2010-07-30 20:02:09

标签: python twisted multiprocessing

有一种情况我将要解析网站。每个站点都必须拥有自己的“解析器”,并且可能是它自己处理cookie /等的方式。

我正试图进入我的脑海,这将是一个更好的选择。

选择I:  我可以创建一个多处理函数,其中(masterspawn)应用程序获取输入URL,然后它跨越masterspawn应用程序中的进程/函数,然后处理页面/ URL的所有设置/获取/解析。

这种方法会运行一个主应用程序,然后它会创建内部函数的多个实例..应该是快速,是/否?

选择II:  我可以创建一个“Twisted”类型的服务器,它基本上与Choice I做同样的事情。不同之处在于使用“Twisted”也会产生一些开销。我正在尝试评估Twisted,关于它是一个“服务器”,但我不需要它来执行获取网址。

选择III:  我可以用scrapy。我倾向于不走这条路,因为我不想/需要使用scrapy似乎有的开销。正如我所说,每个目标URL都需要自己的解析功能,以及处理cookie ...

我的目标是基本上将“架构”解决方案分布在多个框中,其中每个客户端框与主服务器连接,主服务器分配要解析的URL。

感谢您对此有任何意见..

- 汤姆

2 个答案:

答案 0 :(得分:2)

这个问题有两个方面:并发和分发。

并发:Twisted或多处理将完成并发处理提取/解析作业的工作。我不确定你的“扭曲开销”的前提来自哪里。相反,多处理路径会产生更多的开销,因为必须产生(相对较重的)OS过程。 Twisteds处理并发的方式要轻得多。

分发:多处理不会将您的提取/解析作业分发到不同的框。扭曲可以做到这一点,例如。使用AMP协议构建设施。

我无法评论scrapy,从未使用它。

答案 1 :(得分:1)

对于这个特殊的问题,我会选择多处理 - 它易于使用且易于理解。你并不特别需要扭曲,所以为什么要采取额外的复杂功能。

您可能需要考虑的另一个选项:使用消息队列。让主服务器将URL放到队列中(例如beanstalkdresque0mq)并让工作进程获取URL并处理它们。您将获得并发和分发:您可以在任意数量的计算机上运行工作程序。