2010-12-05 44 views
1

我正在开发波兰博客圈监测网站,我正在寻找“最佳做法”与处理 海量的python内容下载。组织池为多个网站海量下载

这里是一个工作流的样本sheme:

http://img577.imageshack.us/img577/2971/scheme.png

说明:

我已经分类的RSS源数据库(1000左右)。每隔一小时左右我都应该检查Feed是否有新的项目发布。如果是这样,我应该分析每个新项目。 分析过程处理每个文档的元数据,并下载每个发现的图像。的代码

简体一个线程版本:

for url, etag, l_mod in rss_urls: 
    rss_feed = process_rss(url, etag, l_mod) # Read url with last etag, l_mod values 
    if not rss: 
     continue 

    for new_item in rss_feed: # Iterate via *new* items in feed 
     element = fetch_content(new_item) # Direct https request, download HTML source 
     if not element: 
      continue 

     images = extract_images(element) 
     goodImages = [] 
     for img in images: 
      if img_qualify(img): # Download and analyze image if it could be used as a thumbnail 
       goodImages.append(img) 

所以我遍历throught RSS提要,只下载新的项目源。从Feed中下载每个新的项目。下载并分析项目中的每个图像。

HTTR请求出现在follwing阶段: - 下载RSS XML文档 - 下载订阅RSS 发现X的项目 - 下载每个项目

我决定尝试蟒蛇GEVENT的所有图像(www.gevent .org)库来处理多个网址内容下载

我想要获得的结果: - 能够限制外部http请求的数量 - 能够下载所有列出的内容项目。

什么是最好的方法来做到这一点?

我不确定,因为我是新来的parralel编程(这个异步请求可能与parralel编程根本没有关系),我不知道如何完成这样的任务 成熟世界,然而。

我想到的唯一想法是使用以下技术: - 每45分钟通过cronjob运行处理脚本 - 尝试在开始时用写入的pid进程锁定文件。如果锁定失败,请检查此pid的进程列表。如果找不到pid,可能在某个时候进程失败,并且安全地打开新的进程。 - 通过gets pool运行任务的包装器为rss feeds下载,在每个阶段(找到新的项目)添加新作业来quique下载项目,每下载一个项目添加图像下载任务。 - 检查当前正在运行的任务的几秒钟状态,如果FIFO模式中有空闲插槽,则从quique运行新作业。

对我来说听起来不错,但也许这种任务有一些“最佳做法”,我现在正在重新发明轮子。 这就是为什么我在这里发布我的问题。

Thx!

回答