撸代码之前让我们先来看几个概念:

什么是协程(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 骨架的更多相关文章

  1. 前端读者 | Web App开发入门

    本文来自互联网 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词 - Web App(意为基于WEB形式的应用程序).业界关于Web App与Nativ ...

  2. 【问题记录】uwsgi部署并启动俩个几乎一样的python flask web app,发现有一个app响应时间非常长

    uwsgi在同一台linux上启动python flask web app(俩个), 发现第一个和第二个的简单性能测试差距非常大,差了将近一倍: 第一个结果: Concurrency Level: 1 ...

  3. python web开发 编写web框架

    参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143233900 ...

  4. 【AMAD】splinter -- 用于测试web app的python框架

    简介 动机 作用 用法 热度分析 个人评分 简介 Splinter1是一个开源工具,使用Python编写,用于测试web apps.它可以用来对浏览器实现自动化操作,比如访问URLs,和按钮等交互. ...

  5. 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道

    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取

  6. [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)

    [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...

  7. 详解Python Streamlit框架,用于构建精美数据可视化web app,练习做个垃圾分类app

    今天详解一个 Python 库 Streamlit,它可以为机器学习和数据分析构建 web app.它的优势是入门容易.纯 Python 编码.开发效率高.UI精美. 上图是用 Streamlit 构 ...

  8. (数据科学学习手札121)Python+Dash快速web应用开发——项目结构篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  9. Python学习--20 Web开发

    HTTP格式 HTTP协议是基于TCP和IP协议的.HTTP协议是一种文本协议. 每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的. HTTP ...

随机推荐

  1. 【Python3的函数初识】

    一.函数 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率,可扩展性强. 2.函数的分类 在python中函数分两类:内 ...

  2. mysql启动日志文件log_bin

    今天正在无所事事的时候,突然收到需要我打开mysql的log_bin,当时我就懵逼了...不多说别的,我连这个log_bin在哪里,怎么知道是否启动了都不知道,怎么去做? 在万分纠结下,查询了很多资料 ...

  3. [Spark内核] 第38课:BlockManager架构原理、运行流程图和源码解密

    本课主题 BlockManager 运行實例 BlockManager 原理流程图 BlockManager 源码解析 引言 BlockManager 是管理整个Spark运行时的数据读写的,当然也包 ...

  4. python 浅析类方法与静态方法

    类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...

  5. C++拷贝构造函数(深拷贝与浅拷贝)

    转自http://blog.csdn.net/lwbeyond/article/details/6202256/ 一. 什么是拷贝构造函数 对于普通类型的对象来说,它们之间的复制是很简单的,例如:in ...

  6. MongoDB的安装与配置

    一.安装包安装: 1.安装 #1.安装路径为D:\MongoDB,将D:\MongoDB\bin目录加入环境变量 #2.新建目录与文件D:\MongoDB\data\dbD:\MongoDB\log\ ...

  7. WPF: WpfWindowToolkit 一个窗口操作库的介绍

    在 XAML 应用的开发过程中,使用MVVM 框架能够极大地提高软件的可测试性.可维护性.MVVM的核心思想是关注点分离,使得业务逻辑从 View 中分离出来到 ViewModel 以及 Model ...

  8. 【批处理学习笔记】第十三课:常用dos命令(3)

    网络命令ping 进行网络连接测试.名称解析ftp 文件传输net 网络命令集及用户管理telnet 远程登陆ipconfig显示.修改TCP/IP设置msg 给用户发送消息arp 显示.修改局域网的 ...

  9. [bzoj1594] [Usaco2008 Jan]猜数游戏

    二分答案(二分没冲突的前Q-1个问题),用并查集判定(用法同bzoj 1576) 假设一个询问区间[l,r],最小干草堆数目是A,我们可以得出[l,r]上的干草堆数目都>=A. 二分出mid后, ...

  10. ACM中常见错误对应表

    因为经常写错题,找了个这个看看... 传送门:http://www.cnblogs.com/ZouCharming/p/3868844.html 我太垃圾了... 我出现过的错误: Wrong Ans ...