官方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()
发表评论
-
用webpy+gae做一个隐藏播放文件地址的东东,失败了2 -半成功
2012-04-23 21:14 1006昨天说到失败了想换一个html5播放器试试其实跟播放器根本没有 ... -
用webpy+gae做一个隐藏播放文件地址的东东,失败了
2012-04-22 22:52 1360很简单 想把一些mp3文件放到gae上,不过不想被下载,虽 ... -
用chrome访问gae的static文件的问题
2012-04-21 14:49 2655Traceback (most recent call ... -
一篇写的还不错的gae入门
2012-04-08 20:37 1021经过一段时间的摸索,感觉gae已经入门了 特地把查到的资料上 ... -
web.py笔记gae的session总结
2012-03-09 00:04 2570这几天利用gae部署webpy的小东西 感慨颇多 1 ga ... -
web.py笔记db处理 坑爹_test=True
2012-03-04 15:44 3277http://webpy.org/cookbook/Inser ... -
web.py笔记 表单post的checkbox
2012-03-02 23:40 3625<p> <label for=&quo ... -
web.py笔记 中文html
2012-03-01 00:37 1364本来今天测试的是数据库 结果在template的html里面 ... -
web.py笔记模板3 i18n 切换
2012-02-26 21:42 1669研究了很久pot,po,gettext,poedit的文档 ... -
web.py笔记模板2 i18n准备po和mo文件
2012-02-22 22:23 1721其实,今天晚上本来像做i18n的 http://webpy. ... -
web.py笔记模板1
2012-02-21 22:27 3438http://webpy.org/docs/0.3/templ ... -
web.py笔记 cookie
2012-02-19 16:28 1493官方url http://webpy.org/co ... -
web.py笔记 处理404 500
2012-02-12 22:50 3161官方cookbook http://webpy. ... -
wing ide 设置
2012-02-12 22:43 11331用惯了eclipse,这个轻量级的wingide 还真是有点不 ... -
web.py笔记ctx
2012-02-12 16:48 4879http://webpy.org/cookbook/ctx ... -
web.py笔记ssl 续 apache
2012-02-11 22:32 1381对前几天ssl的连接方式,仍然比较担心 感觉不是那么妥当 ... -
web.py笔记ssl 坑爹
2012-02-09 21:42 3805今天又回过神来,准备看看web.py的ssl支持 结果调了半 ... -
web.py 笔记 控制url
2012-01-15 22:54 4106web.py 的url控制说明 ,官方的中文coo ... -
web.py笔记session
2012-01-08 21:58 4160官方的例子 http://webpy.o ... -
web.py
2012-01-04 21:37 7554http://webpy.org/ import ...
相关推荐
在打开`Python 学习笔记(三).ipynb`文件时,你需要确保已经安装了Jupyter Notebook。安装过程通常通过Python的包管理器pip完成,命令为`pip install jupyterlab`或`pip install notebook`。一旦安装完成,你可以...
- **模块**:一个`.py`文件就是一个模块,包含了相关的函数和类。 - **包**:是一些模块的集合,用于组织和管理相关的模块。 ### 6. 面向对象编程 - **类与对象**:类是对象的模板,对象是类的实例。 - **继承**:...
而脚本文件则是将代码写入一个以.py结尾的文件中,可以通过命令行直接执行这些文件,类似于Shell脚本。此外,还可以设置脚本文件为可执行文件,通过在文件顶部指定Python解释器路径来实现。 6. Python文件操作和...
要执行Python文件,可以在命令行中输入`python 文件名.py`。另外,也可以在文件所在目录下打开命令行,通过`cd`命令切换到该目录,然后执行Python程序。除此之外,一些集成开发环境(IDEs)如PyCharm或VSCode也能...
- 字节代码:以.py为后缀,这种代码是Python源代码文件,可以直接被Python解释器执行。 - 编译后的字节码:以.pyc为后缀,是源代码编译后的字节码文件,为了提高加载速度。 - 优化的字节码:以.pyo为后缀,是经过...
它的语法特点包括缩进代替大括号来表示代码块,以及使用自然语言式的函数和变量命名,使得代码看起来更加清晰。 1. **基础语法**: - 变量声明:Python不需要显式声明变量类型,变量名赋值即创建变量。 - 数据...
【Python入门笔记】是针对初学者的一份详细教程,涵盖了Python语言的基础以及一些常用的数据科学库,如NumPy、SciPy、Matplotlib和Pandas。这些库在数据分析、科学计算和可视化方面扮演着重要角色。 Python是一种...
5. **模块与包**:Python使用模块来组织代码,一个`.py`文件就是一个模块。模块间可以通过`import`语句引用,提高代码复用性。更复杂的代码组织结构可以使用包,包是一个包含多个子模块的目录,通过点号`.`来访问...
`cortx_jupyter`是一个特定的Python库,专注于集成CORTX(大规模开源对象、文件和块存储解决方案)与Jupyter环境。Jupyter是一个流行的交互式计算环境,广泛用于数据分析、科学计算和机器学习项目。通过`cortx_...
### Django学习笔记 #### Django简介 Django是一个高级的、开放源代码的Web应用框架,由Python编写而成。它遵循MVT(Model-View-Template)设计模式,为开发者提供了快速构建高性能网站的能力。 #### MVT架构理解 ...
Python的字节码可以在任何支持Python虚拟机的系统上运行,其文件后缀名通常为.py,字节码文件后缀名通常为.pyc,优化后的字节码文件后缀名通常为.pyo。 Python广泛应用于系统编程、图形用户界面编程、网络编程、...
Python是一种高级、解释型、交互式和面向对象的脚本语言,因其简洁、易读的语法而被广泛应用于网络爬虫、数据分析、机器学习、Web开发等多个领域。本教程将深入探讨Python的核心概念和语法,旨在帮助初学者快速掌握...
在这个压缩包中的“ljg_resource”可能是一个文件夹,里面可能包含各种类型的文件,如文本文件(.txt)、Python源代码文件(.py)、Markdown格式的学习笔记(.md)或者图像文件等。这些文件可能涵盖了Python的基础语法、...
在这个"py代码-个人python代码"的压缩包中,包含了两个文件:main.py和README.txt。这两个文件通常在Python项目中扮演着重要角色。 `main.py`是主程序文件,这通常意味着它是项目的入口点,当运行这个项目时,会从...
这个压缩包文件 "py4e-master" 可能是一个完整的课程资料库,包含了一系列的 Python 学习材料,比如教程、练习题和可能的解决方案。 Python 是一种高级的、解释型、交互式和面向对象的脚本语言。它以其简洁明了的...
"README.txt"通常是一个文本文件,用于记录项目的基本信息、使用说明、安装步骤或开发者笔记。在Python学习的上下文中,这个文件可能会介绍`main.py`的目的、如何运行以及可能依赖的外部库。阅读并理解README是使用...
同时,可以使用包来组织自定义模块,通过__init__.py文件创建包结构。 面向对象编程(OOP)是Python的另一大特色。Python支持类(class)的定义,可以创建对象实例,并实现继承、封装和多态等特性。类的定义包括...
Python3000,也被称为Py3k,是Python的重要升级版,提供了更多改进和新特性。它是一款跨平台的语言,可以在多种操作系统上运行,包括Windows、Linux和macOS。Python是解释性的,意味着代码无需预先编译即可执行,这...
3. **模块与包**:模块是Python代码的组织方式,一个.py文件就是一个模块。Python通过import语句引入模块,而包是模块的进一步封装,通常以层级目录形式存在。 4. **面向对象编程**:Python支持面向对象编程,包括...