Python-Blog2-编写Web app 骨架
撸代码之前让我们先来看几个概念:
什么是协程(Coroutine)?
假设现在有两个子程序,子程序A和子程序B:
def A():
print('1')
print('2')
print('3')
def B():
print('X')
print('Y')
print('Z')
若程序由协程执行,那么输出可能是这样1 2 X Y 3 Z,也就是说协程可以通过程序自身控制,在执行A的过程中中断,然后再去执行B,B执行过程中中断,从A中断的地方继续执行。
python对协程的支持是通过generator实现的,可以通过yield返回生成器,可以通过send接收调用者发出的参数,然后从上次执行中断的位置继续执行。
asyncio
@asyncio.coroutine将一个generator标记为coroutine类型- event_loop,事件循环,程序开启一个无限循环
aiohttp
asyncio可以实现单线程并发IO操作,如果将asyncio用在服务端,可是通过用单线程+coroutine实现多用户高并发支持,aiohttp就是局域asyncio实现的HTTP框架。
代码实现
创建app.py,代码如下:
#coding:utf-8
'''
说明:Web app 建立在asyncio的基础上,所以这里使用aiohttp写一个基本的app.py
'''
#引入日志模块,将日志的级别设置为INFO(info级输出重要信息)
import logging;logging.basicConfig(level=logging.INFO)
#异步io,指的是你发起一个IO操作,却不用等它结束,可以继续做其他事情,当它结束时,你会得到通知
#交给asyncio执行的任务称为协程(coroutine),一个协程可以放弃执行,或把机会让给其他协程(即yield from 或 await)
import asyncio,os,json,time
#aiohttp是基于asyncio实现的Http框架
from aiohttp import web
#该函数的作用是处理URL,之后与具体URL绑定
def index(request):
#返回一个HTTP响应
return web.Response(body=b'<h1>Awesome</h1>',headers={'content-type':'text/html'})
@asyncio.coroutine
def init(loop):
#创建Web服务器实例app,处理URL,Http协议
app=web.Application(loop=loop)
#将处理函数注册到app.route中
app.router.add_route('GET','/',index)
#用协程监听服务
srv=yield from loop.create_server(app.make_handler(),'127.0.0.1',9000)
logging.info('server started at http://127.0.0.1:9000....')
return srv
#获取事件循环
loop=asyncio.get_event_loop()
#执行协程
loop.run_until_complete(init(loop))
#运行协程,直到调用stop()
loop.run_forever()
运行结果:

Python-Blog2-编写Web app 骨架的更多相关文章
- 前端读者 | Web App开发入门
本文来自互联网 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词 - Web App(意为基于WEB形式的应用程序).业界关于Web App与Nativ ...
- 【问题记录】uwsgi部署并启动俩个几乎一样的python flask web app,发现有一个app响应时间非常长
uwsgi在同一台linux上启动python flask web app(俩个), 发现第一个和第二个的简单性能测试差距非常大,差了将近一倍: 第一个结果: Concurrency Level: 1 ...
- python web开发 编写web框架
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143233900 ...
- 【AMAD】splinter -- 用于测试web app的python框架
简介 动机 作用 用法 热度分析 个人评分 简介 Splinter1是一个开源工具,使用Python编写,用于测试web apps.它可以用来对浏览器实现自动化操作,比如访问URLs,和按钮等交互. ...
- 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道
使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取
- [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)
[Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...
- 详解Python Streamlit框架,用于构建精美数据可视化web app,练习做个垃圾分类app
今天详解一个 Python 库 Streamlit,它可以为机器学习和数据分析构建 web app.它的优势是入门容易.纯 Python 编码.开发效率高.UI精美. 上图是用 Streamlit 构 ...
- (数据科学学习手札121)Python+Dash快速web应用开发——项目结构篇
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- Python学习--20 Web开发
HTTP格式 HTTP协议是基于TCP和IP协议的.HTTP协议是一种文本协议. 每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的. HTTP ...
随机推荐
- Fiddler中设置断点修改Request和Response
Fiddler中设置断点修改Request Fiddler最强大的功能莫过于设置断点了,设置好断点后,你可以修改httpRequest 的任何信息包括host, cookie或者表单中的数据.设置断点 ...
- SSM框架开发web项目系列(五) Spring集成MyBatis
前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...
- python3之异常处理,断言和反射
1.异常基础 python在运行过程中,程序解释机制会测试代码,如检测不通过则会抛出异常. try: aa = 10 bb = ' cc = aa + bb except Exception as e ...
- apache2.2版本安装说明
部署httpd服务 apache是一个模块化设计的服务,所谓的模块化就是将各个功能,特性都独立的分开,这样设计的好处是可扩展性强,各个功能之间的依赖性相对较弱,在后期修改,升级,添加新功能是非常方 ...
- 【读书笔记】【深入理解ES6】#6-Symbol和Symbol属性
在ES5及早期版本中,JS语言包含5中原始类型: 字符串型 数字型 布尔型 null undefined ES6引入了第六种原始类型: Symbol 创建Symbol let firstName = ...
- AdaBoost入门
写一点自己理解的AdaBoost,然后再贴上面试过程中被问到的相关问题.按照以下目录展开. 当然,也可以去我的博客上看 Boosting提升算法 AdaBoost 原理理解 实例 算法流程 公式推导 ...
- 大话python面向对象
前言 师门中每逢成人礼就要下山历练一番,小掌门今年成人礼,下山也有一段时日.可恰逢年底,今年百姓收成都不是很好,各大店铺也很少招人,再加上学艺不精,小掌门无事可做就只能饿肚子了.后来小掌门饿的实在不行 ...
- vi/vim 如何添加和删除多行注释
1.进入vi/vim编辑器,按CTRL+V进入可视化模式(VISUAL BLOCK). 2.移动光标上移或者下移,选中多行的开头. 3.选择完毕后,按大写的I键,此时下方会提示进入"inse ...
- IdentityServer(13)- 添加JavaScript客户端
这个快速入门将展示如何构建一个JavaScript客户端应用程序. 用户将登录到IdentityServer,使用IdentityServer发出的访问令牌调用Web API,并注销IdentityS ...