期末迎考,忙碌中:)学习进度放缓
今天这篇文章和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()
分享到:
- 2008-01-03 16:19
- 浏览 2396
- 评论(0)
- 论坛回复 / 浏览 (0 / 2003)
- 查看更多
相关推荐
可用于UnityVR开发,3D游戏开发,高清天空盒子Skybox素材,游戏环境背景素材,无水印。 让你身临其境的天空盒子,各类题材丰富,都是辛苦搜罗所得的高清exr格式...4-用刚创建的Material代替项目中原本的系统默认Skybox
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 ...
4. **配置驱动**:Pylons框架的配置基于ini文件,使得开发者可以通过修改配置文件轻松调整应用设置,而无需修改代码。 5. **强依赖于WSGI**:Pylons是基于WSGI(Web Server Gateway Interface)标准的,这意味着它...
在Python Web开发中,Pylons是一个轻量级、高性能的框架,它以其高度可定制性而受到开发者喜爱。Pylons采用MVC(Model-View-Controller)设计模式,允许开发者灵活选择不同的库来实现各个层的功能。在本例子中,我们...
4. **路由与控制器**:详细讲解了Pylons中的路由机制及控制器的设计模式。 5. **模板系统**:介绍了Pylons支持的几种模板引擎,如Mako、Genshi等,并展示了如何使用它们构建动态网页。 6. **数据库集成**:讨论了...
标题中的“Pylons教程”指的是一个关于Python Web框架Pylons的学习资源,可能是系列文章或者教程。Pylons是一个轻量级、高性能的Web框架,它基于Python语言,设计目标是提供一种灵活且可扩展的环境来构建复杂的Web...
根据提供的文件信息,我们可以推断出这是一本关于Pylons框架的技术书籍,作者是James Gardner,出版于2008年。以下是对该书的关键知识点进行的详细解读。 ### 关键知识点概述 #### 1. **Pylons 框架简介** - **...
资源来自pypi官网。 资源全名:Pylons-0.8.2-py2.3.egg
Gardner -- The Definitive Guide to Pylons -- 2008 -- code.7z
- **基于类和函数的视图**:支持使用类或函数定义视图逻辑。 - **资产规格**:可以灵活指定应用资源的位置。 - **可扩展的模板系统**:提供高度可定制化的模板渲染机制。 - **渲染视图返回字典**:视图可以返回...
塔架 Pylons是一个快速的Web应用程序开发框架。 笔记定向塔已与repoze.bfg合并,并且现在处于仅维护模式。 强烈建议新项目从新的合并的Web框架。安装。 如果要从源代码安装,可以运行以下命令: $ python setup.py ...
pyramid_debugtoolbar pyramid_debugtoolbar提供了一个调试工具栏,在您开发Pyramid应用程序时非常有用。 请注意, pyramid_debugtoolbar是Michael van ... $ git clone https://github.com/Pylons/pyramid_debugtool
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 注意:下载...
4. **集成其他Python框架**:PyAMF能够与多种Python Web框架集成,如Django、Flask、Pylons等,方便地实现与Flash客户端的交互。 5. **Flex和 BlazeDS集成**:如果你的项目使用了Adobe Flex或BlazeDS,PyAMF可以...
它是Pylons框架的进化版,旨在提供更加轻量级、模块化且易于扩展的解决方案,以满足现代Web应用的需求。在本文中,我们将深入探讨Pyramid 1.2的源码,理解其核心概念,并探索如何构建基于Pyramid的应用。 **一、...