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 ...
随机推荐
- 带以太网的MicroPython开发板:TPYBoardv201建立云加法器实例
转载请注明文章来源,MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇 前面的一篇文档向大家介绍了v201的开发板作为客户端终端向TCPS上传数据的基本过程 ...
- IOS 看懂此文,你的block再也不需要WeakSelf弱引用了!
前言: 最近都在折腾 Sagit 架框的内存释放的问题,所以对这一块有些心得. 对于新手,学到的文章都在教你用:typeof(self) __weak weakSelf = self. 对于老手,可能 ...
- Mongodb高级查询【二】
上一篇文章,写了mongodb常规操作,继续写入,本章主要讲高级查询,文本,聚集,大数据查询. Mongodb的查询语法是很多的,是NOSQL队伍中比较丰富的一个.当然有很多查询跟关系型查询无法相比. ...
- JS实现EasyUI ,Datagrid,合并单元格功能
为了实现datagrid的合并单元格效果,datagrid的数据加载方式肯定是要写在JS文件内部的. 一:在JS内部添加Datagrid数据加载方法如下: $("#id").dat ...
- 【转】NO.2、Appium之IOS第一个demo
接第一篇:Appium之iOS环境搭建 http://blog.csdn.net/clean_water/article/details/52946191 这个实例继承了unittest,重写了它的s ...
- PyQt4 的事件与信号 -- 重写事件处理方法
# PyQt中的事件处理主要依赖重写事件处理函数来实现 import sys from PyQt4 import QtCore, QtGui class MainWindow(QtGui.QWidge ...
- IOS 触摸事件分发机制详解
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:MelonTeam 前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,当遇到以下几种情形的时候你很可能抓破头皮都找不到解决方案 ...
- CSS列表及导航条
大多数网页中都包含某种形式的列表,今天我们就来联系几个基本的导航条. 垂直导航条 注意要点: 去掉默认的项目符号(list-style-type:none),将外边距和内边距都设为0. 以em设置 ...
- selenium之 驱动环境配置chrome、firefox、IE
讲起动态网页获取我们一定会用到selenium,至于selenium在各种语言的开发代码很多,但是在我们兴致勃勃找了很多代码,要运行的时候,编译器只会给我们抛出异常,因为我们没有配置好环境.下面我将为 ...
- windows下apache配置虚拟主机
因为有多个laravel项目需要配置根目录到public下面,所以要配置多个虚拟主机 方法一:添加端口号 第一步:进入apache的目录 Apache24\conf 找到 httpd.conf 文件, ...