`
zuroc
  • 浏览: 1311942 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

pylons建站日记4_边界检测类

阅读更多
期末迎考,忙碌中:)学习进度放缓

今天这篇文章和pylons没有什么关系,不过也算是建站的一部分.

前面说过,我是打算写一个抓新闻的网站.

但是,每次抓取时如何区分哪些是更新了,哪些是已经抓取的网页呢?

我的思路是判断页面地址.

但是每抓取一个网页就要去查询一次数据库,判断是该网址是否已存在否存在不免有点低效.
其实这应该并非性能瓶颈,只是C++的效率优先的惯性思维,写完了才发现可能是过早最优化了:)
罪过,罪过...
不过既然已经写了,那就用着吧.

算法假定了这样的一个事实,更新的新闻的链接总是出现在已抓取新闻之前.
我们只需要寻找到最后一条更新过的新闻,然后就可以通过切片获得更新的网址的列表.
而边界可以通过两分法获得,复杂度是O(log2(n)),比逐条查询的O(n)快一点.
class Bound(object):
    class NoneError(LookupError):
        pass
    """
    用途:查找有序对列 满足 与 不满足 函数的边界.
    >>> print Bound(range (100),lambda x:x>12).false_true_index
    (12, 13)
    >>> print Bound(range (10),lambda x:x>12).false_true_index
    (0, None)
    >>> print Bound(range (100),lambda x:x>-1).false_true_index
    (None, 0)
    >>> print Bound(range (100),lambda x:x<12).false_true_index
    (12, 11)
    """
    def __init__(self,list,func):
        self.__true_index=None
        self.__false_index=None
        length=len(list)
        if length:
            if func(list[-1]):
                self.__true_index=length-1
            else:
                self.__false_index=length-1
            if func(list[0]):
                self.__true_index=0
            else:
                self.__false_index=0
            
            if self.__false_index!=None and self.__true_index!=None:
                if self.__true_index>self.__false_index:
                    get_diff=lambda:self.__true_index-self.__false_index
                    get_mid=lambda diff:diff/2+self.__false_index
                else:
                    get_diff=lambda:self.__false_index-self.__true_index
                    get_mid=lambda diff:diff/2+self.__true_index
                
                diff=get_diff()
                while diff>1:
                    if func(list[mid]):
                        self.__true_index=mid
                    else:
                        self.__false_index=mid
                    diff=get_diff()
                    mid=get_mid(diff)
                
                if self.__false_index!=None:
                    self.__false_index_value=list[self.__false_index]
                if self.__true_index!=None:
                    self.__true_index_value=list[self.__true_index]

    @property
    def true_index(self):
        return self.__true_index

    @property
    def false_index(self):
        return self.__false_index
    
    @property
    def false_true_index(self):
        return (self.false_index,self.true_index)

    @property
    def true_value(self):
        if self.__true_index_value==None:
            raise NoneError,'True bound not exist'
        return self.__true_index_value


    @property
    def false_value(self):
        if self.__false_index==None:
            raise NoneError,'False bound not exist'
        return self.__false_index_value

    @property
    def false_true_value(self):
        return (self.false_value,self.true_value)
   

if "__main__"==__name__:
    import doctest
    doctest.testmod()

分享到:
评论

相关推荐

    塔架pylons_VR游戏开发_天空盒子_Skybox_高清_16K_EXR

    可用于UnityVR开发,3D游戏开发,高清天空盒子Skybox素材,游戏环境背景素材,无水印。 让你身临其境的天空盒子,各类题材丰富,都是辛苦搜罗所得的高清exr格式...4-用刚创建的Material代替项目中原本的系统默认Skybox

    [James_Gardner]_The_Definitive_Guide_to_Pylons(z-lib.org).rar

    In this book, cofounder and lead developer James Gardner brings you a comprehensive introduction to Pylons, the web framework that uses the best of Ruby, Python, and Perl and the emerging WSGI ...

    Python库 | Pylons-0.8.2-py2.3.egg

    4. **配置驱动**:Pylons框架的配置基于ini文件,使得开发者可以通过修改配置文件轻松调整应用设置,而无需修改代码。 5. **强依赖于WSGI**:Pylons是基于WSGI(Web Server Gateway Interface)标准的,这意味着它...

    Python Web框架Pylons中使用MongoDB的例子

    在Python Web开发中,Pylons是一个轻量级、高性能的框架,它以其高度可定制性而受到开发者喜爱。Pylons采用MVC(Model-View-Controller)设计模式,允许开发者灵活选择不同的库来实现各个层的功能。在本例子中,我们...

    Apress.the.Definitive.Guide.to.Pylons.Dec.2008

    4. **路由与控制器**:详细讲解了Pylons中的路由机制及控制器的设计模式。 5. **模板系统**:介绍了Pylons支持的几种模板引擎,如Mako、Genshi等,并展示了如何使用它们构建动态网页。 6. **数据库集成**:讨论了...

    借着今天的大好日子,挖一个Pylons教程的坑

    标题中的“Pylons教程”指的是一个关于Python Web框架Pylons的学习资源,可能是系列文章或者教程。Pylons是一个轻量级、高性能的Web框架,它基于Python语言,设计目标是提供一种灵活且可扩展的环境来构建复杂的Web...

    Gardner -- The Definitive Guide to Pylons -- 2008.pdf

    根据提供的文件信息,我们可以推断出这是一本关于Pylons框架的技术书籍,作者是James Gardner,出版于2008年。以下是对该书的关键知识点进行的详细解读。 ### 关键知识点概述 #### 1. **Pylons 框架简介** - **...

    PyPI 官网下载 | Pylons-0.8.2-py2.3.egg

    资源来自pypi官网。 资源全名:Pylons-0.8.2-py2.3.egg

    Gardner -- The Definitive Guide to Pylons -- 2008 -- code.7z

    Gardner -- The Definitive Guide to Pylons -- 2008 -- code.7z

    Pyramid英文文档.pdf

    - **基于类和函数的视图**:支持使用类或函数定义视图逻辑。 - **资产规格**:可以灵活指定应用资源的位置。 - **可扩展的模板系统**:提供高度可定制化的模板渲染机制。 - **渲染视图返回字典**:视图可以返回...

    pylons:Pylons框架,社区在Pylons项目的指导下得到了维护。 与repoze.bfg合并用于金字塔框架

    塔架 Pylons是一个快速的Web应用程序开发框架。 笔记定向塔已与repoze.bfg合并,并且现在处于仅维护模式。 强烈建议新项目从新的合并的Web框架。安装。 如果要从源代码安装,可以运行以下命令: $ python setup.py ...

    pyramid_debugtoolbar:金字塔调试工具栏

    pyramid_debugtoolbar pyramid_debugtoolbar提供了一个调试工具栏,在您开发Pyramid应用程序时非常有用。 请注意, pyramid_debugtoolbar是Michael van ... $ git clone https://github.com/Pylons/pyramid_debugtool

    JCR_codereview

    Web Server:JCR使用Pylons内建的Web server,不需要其他Server。 依赖的软件: Python 2.4 or later (2.5+ recommended) Pysqlite(DB-API 2.0 interface for SQLite databases) Setuptools Pysvn 注意:下载...

    Python库 | PyAMF-0.5-py2.5-linux-x86_64.egg

    4. **集成其他Python框架**:PyAMF能够与多种Python Web框架集成,如Django、Flask、Pylons等,方便地实现与Flash客户端的交互。 5. **Flex和 BlazeDS集成**:如果你的项目使用了Adobe Flex或BlazeDS,PyAMF可以...

    pyramid-1.2.tar.gz

    它是Pylons框架的进化版,旨在提供更加轻量级、模块化且易于扩展的解决方案,以满足现代Web应用的需求。在本文中,我们将深入探讨Pyramid 1.2的源码,理解其核心概念,并探索如何构建基于Pyramid的应用。 **一、...

Global site tag (gtag.js) - Google Analytics