`
fighter1945
  • 浏览: 230427 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

web.py笔记 大块文件下载

 
阅读更多

 

官方url

http://webpy.org/cookbook/streaming_large_files.zh-cn

 

有关yield的说明

从python的yield说起 http://lukejin.iteye.com/blog/587051

[Python 学习]2.5版yield之学习心得 http://blog.donews.com/limodou/archive/2006/09/04/1028747.aspx

 

关于yield的写法

以上两篇文章的写法我都懂,但是看web.py里面这个例子的时候,还是看不懂

 

count_holder通过iframe里面的url,调了4次count_down

访问一次127.0.0.1:8080/,相当于接连访问了

127.0.0.1:8080/10

127.0.0.1:8080/9

127.0.0.1:8080/8

127.0.0.1:8080/7 

4个url

所以继续看count_down的内容

count_down里有好几个yield

怎么能一口气就运行到底了呢?

 

 

后来才看见这句话

You can't mix basic string and Yield returns in the same method. If you use Yield, you'll have to use yield for everything because your function becomes a generator.

 

 

到此为止,个人理解,

1  用了yield就不能用return,yield相当于return + wait的关系

2  web.py会不断调用下面每个class的next方法,直到最后

 

做了个实验来证实

 

 

# Simple streaming server demonstration
# Uses time.sleep to emulate a large file read
import web
import time

urls = (
    "/",    "count_holder",
    "/down",  "count_down",
    )
app = web.application(urls, globals())


class count_down:
    def GET(self,count):

        print 'count_down'
   

class count_holder:
    def GET(self):
        web.header('Content-type','text/html')
        web.header('Transfer-Encoding','chunked')        

        yield '1'    
        print 'step1'
        yield '2'     
        print 'step2'
        yield '3'        
        print 'step3'


if __name__ == "__main__":
    app.run()
 

 

 

运行 http://192.168.1.100:8080/  后在控制台的结果果然是

 

 

step1

step2

step3

192.168.1.100:2069 - - [17/Feb/2012 22:09:38] "HTTP/1.1 GET /favicon.ico" - 200 OK

 

 

连放在yield下面的step3都打出来了真够可以。

 

 

 写道
题外话,为啥我试验用的例子专门把
"/(.*)", "count_down",
改成
"/down", "count_down",


还是web.py官方例子坑爹

"/"和"/(.*)"的正则,都对http://192.168.1.100:8080/这个url有效
结果可能是因为"/"在上面的关系,所以"/"对应的count_holder优先吧

不改的话,访问http://192.168.1.100:8080/ 控制台出来的结果
step1
step2
step3
count_down
192.168.1.100:2090 - - [17/Feb/2012 22:12:24] "HTTP/1.1 GET /favicon.ico" - 200 OK

 

 

最后结果,个人觉得比较实用的分块下载的例子是,很有java风格啊

http://www.cnblogs.com/QLeelulu/archive/2011/08/05/2128577.html

class download:
    def GET(self):
        file_name = 'file_name'
        file_path = os.path.join('file_path', file_name)
        f = None
        try:
            f = open(file_path, "rb")
            webpy.header('Content-Type','application/octet-stream')
            webpy.header('Content-disposition', 'attachment; filename=%s.dat' % file_name)
            while True:
                c = f.read(BUF_SIZE)
                if c:
                    yield c
                else:
                    break
        except Exception, e:
            print e
            yield 'Error'
        finally:
            if f:
                f.close()
 
分享到:
评论

相关推荐

    python学习笔记(三)

    在打开`Python 学习笔记(三).ipynb`文件时,你需要确保已经安装了Jupyter Notebook。安装过程通常通过Python的包管理器pip完成,命令为`pip install jupyterlab`或`pip install notebook`。一旦安装完成,你可以...

    Python 学习笔记.pdf

    - **模块**:一个`.py`文件就是一个模块,包含了相关的函数和类。 - **包**:是一些模块的集合,用于组织和管理相关的模块。 ### 6. 面向对象编程 - **类与对象**:类是对象的模板,对象是类的实例。 - **继承**:...

    Python3基础学习笔记.pdf

    而脚本文件则是将代码写入一个以.py结尾的文件中,可以通过命令行直接执行这些文件,类似于Shell脚本。此外,还可以设置脚本文件为可执行文件,通过在文件顶部指定Python解释器路径来实现。 6. Python文件操作和...

    python学习笔记1.docx

    要执行Python文件,可以在命令行中输入`python 文件名.py`。另外,也可以在文件所在目录下打开命令行,通过`cd`命令切换到该目录,然后执行Python程序。除此之外,一些集成开发环境(IDEs)如PyCharm或VSCode也能...

    python核心笔记.pdf

    - 字节代码:以.py为后缀,这种代码是Python源代码文件,可以直接被Python解释器执行。 - 编译后的字节码:以.pyc为后缀,是源代码编译后的字节码文件,为了提高加载速度。 - 优化的字节码:以.pyo为后缀,是经过...

    python_workspace:python笔记

    它的语法特点包括缩进代替大括号来表示代码块,以及使用自然语言式的函数和变量命名,使得代码看起来更加清晰。 1. **基础语法**: - 变量声明:Python不需要显式声明变量类型,变量名赋值即创建变量。 - 数据...

    python入门笔记

    【Python入门笔记】是针对初学者的一份详细教程,涵盖了Python语言的基础以及一些常用的数据科学库,如NumPy、SciPy、Matplotlib和Pandas。这些库在数据分析、科学计算和可视化方面扮演着重要角色。 Python是一种...

    Vamei 的《Python快速教程》学习笔记。.zip

    5. **模块与包**:Python使用模块来组织代码,一个`.py`文件就是一个模块。模块间可以通过`import`语句引用,提高代码复用性。更复杂的代码组织结构可以使用包,包是一个包含多个子模块的目录,通过点号`.`来访问...

    Python库 | cortx_jupyter-0.1.106-py2-none-any.whl

    `cortx_jupyter`是一个特定的Python库,专注于集成CORTX(大规模开源对象、文件和块存储解决方案)与Jupyter环境。Jupyter是一个流行的交互式计算环境,广泛用于数据分析、科学计算和机器学习项目。通过`cortx_...

    Django学习笔记

    ### Django学习笔记 #### Django简介 Django是一个高级的、开放源代码的Web应用框架,由Python编写而成。它遵循MVT(Model-View-Template)设计模式,为开发者提供了快速构建高性能网站的能力。 #### MVT架构理解 ...

    《Python核心编程》读书笔记

    Python的字节码可以在任何支持Python虚拟机的系统上运行,其文件后缀名通常为.py,字节码文件后缀名通常为.pyc,优化后的字节码文件后缀名通常为.pyo。 Python广泛应用于系统编程、图形用户界面编程、网络编程、...

    py_python核心笔记_python教程_

    Python是一种高级、解释型、交互式和面向对象的脚本语言,因其简洁、易读的语法而被广泛应用于网络爬虫、数据分析、机器学习、Web开发等多个领域。本教程将深入探讨Python的核心概念和语法,旨在帮助初学者快速掌握...

    Python大作业(。).zip

    在这个压缩包中的“ljg_resource”可能是一个文件夹,里面可能包含各种类型的文件,如文本文件(.txt)、Python源代码文件(.py)、Markdown格式的学习笔记(.md)或者图像文件等。这些文件可能涵盖了Python的基础语法、...

    py代码-个人python代码

    在这个"py代码-个人python代码"的压缩包中,包含了两个文件:main.py和README.txt。这两个文件通常在Python项目中扮演着重要角色。 `main.py`是主程序文件,这通常意味着它是项目的入口点,当运行这个项目时,会从...

    py4e

    这个压缩包文件 "py4e-master" 可能是一个完整的课程资料库,包含了一系列的 Python 学习材料,比如教程、练习题和可能的解决方案。 Python 是一种高级的、解释型、交互式和面向对象的脚本语言。它以其简洁明了的...

    py代码-Python学习

    "README.txt"通常是一个文本文件,用于记录项目的基本信息、使用说明、安装步骤或开发者笔记。在Python学习的上下文中,这个文件可能会介绍`main.py`的目的、如何运行以及可能依赖的外部库。阅读并理解README是使用...

    python详细笔记

    同时,可以使用包来组织自定义模块,通过__init__.py文件创建包结构。 面向对象编程(OOP)是Python的另一大特色。Python支持类(class)的定义,可以创建对象实例,并实现继承、封装和多态等特性。类的定义包括...

    Python笔记.docx

    Python3000,也被称为Py3k,是Python的重要升级版,提供了更多改进和新特性。它是一款跨平台的语言,可以在多种操作系统上运行,包括Windows、Linux和macOS。Python是解释性的,意味着代码无需预先编译即可执行,这...

    测控一班2021413216常浚力Python理论考试.rar

    3. **模块与包**:模块是Python代码的组织方式,一个.py文件就是一个模块。Python通过import语句引入模块,而包是模块的进一步封装,通常以层级目录形式存在。 4. **面向对象编程**:Python支持面向对象编程,包括...

Global site tag (gtag.js) - Google Analytics