asyncio可以实现单线程并发IO操作。如果仅用在客户端,发挥的威力不大。如果把asyncio用在服务器端,例如Web服务器,由于HTTP连接就是IO操作,因此可以用单线程+coroutine实现多用户的高并发支持。

asyncio实现了TCP、UDP、SSL等协议,aiohttp则是基于asyncio实现的HTTP框架。

我们先安装aiohttp:

pip install aiohttp

然后编写一个HTTP服务器,分别处理以下URL:

/ - 首页返回b'

Index

';

/hello/{name} - 根据URL参数返回文本hello, %s!。

代码如下:

import asyncio

from aiohttp import web

async def index(request):

await asyncio.sleep(0.5)

return web.Response(body=b'

Index

')

async def hello(request):

await asyncio.sleep(0.5)

text = '

hello, %s!

' % request.match_info['name']

return web.Response(body=text.encode('utf-8'))

async def init(loop):

app = web.Application(loop=loop)

app.router.add_route('GET', '/', index)

app.router.add_route('GET', '/hello/{name}', hello)

srv = await loop.create_server(app.make_handler(), '127.0.0.1', 8000)

print('Server started at http://127.0.0.1:8000...')

return srv

loop = asyncio.get_event_loop()

loop.run_until_complete(init(loop))

loop.run_forever()

注意aiohttp的初始化函数init()也是一个coroutine,loop.create_server()则利用asyncio创建TCP服务。

参考源码

python aiohttp_aiohttp相关推荐

  1. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

  2. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...

  3. 【Kaggle Learn】Python 5-8

    五. Booleans and Conditionals Using booleans for branching logic x = True print(x) print(type(x))''' ...

  4. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  5. 使用python愉快地做高数线代题目~

    今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...

  6. python 位运算与等号_Python 运算符

    和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...

  7. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  8. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  9. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

最新文章

  1. python程序实例电话本-Python示例
  2. SAP HR模块的基础数据表和增强配置
  3. eclipse 全屏插件
  4. 动手学无人驾驶(5):多传感器数据融合
  5. (王道408考研数据结构)第五章树-第三节2:二叉树构造和重建
  6. php用while输出1到100的奇数,用while和for循环分别计算100以内奇数和偶数的和,并输出。...
  7. APP 自动化框架设计思路分享
  8. 怎么隐藏鼠标箭头_立刻上手,无鼠标高效操作excel指南(一)
  9. 前端性能优化的七种方法
  10. 青蛙的约会(poj 1061)exgcd基础题
  11. U号租号平台技术服务支持
  12. 大数据平台回归SQL
  13. python爬wos数据库,用Python爬行WoS
  14. java发现城市_java实现简单注册选择所在城市
  15. 吾爱这个PDF处理小工具,我私藏了一年才偷偷分享!
  16. 英语总结——新的开始
  17. 【网络安全】——逻辑漏洞之短信轰炸漏洞
  18. php 扩展了imagick,PHP编程:PHP使用imagick扩展实现合并图像的方法
  19. 前途未卜的智能音箱,语音助手还差一个杀手级应用
  20. BFC与IFC的区别

热门文章

  1. nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
  2. Unknown SSL protocol error in connection to xxx:443
  3. CentOS 安装及使用 terraform 最新教程
  4. 万能makefile深入浅出 - 第四篇
  5. 在hive中对日期数据进行处理,毫秒级时间转化为yyyy-MM-dd格式
  6. no.5_得到4升的水
  7. 左神算法:调整搜索二叉树中两个错误的节点(Java版)
  8. leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)
  9. 多线程与高并发(四):LockSupport,高频面试题,AQS源码,以及源码阅读方法论
  10. 【计组实验】P2 Modelsim Verilog单周期处理器开发 MIPS指令集