python 之异步模块 asyncio、aiohttp、gevent

  首先咱们要先理解异步请求,如下是示例代码session

  import asyncio并发

  import time异步

  import aiohttpasync

  #定义第1个协程,协程就是将要具体完成的任务,该任务耗时3秒,完成后显示任务完成oop

  async def to_do_something(i):url

  print('第{}个任务:任务启动...'.format(i))spa

  #遇到耗时的操做,await就会使任务挂起,继续去完成下一个任务orm

  await asyncio.sleep(i)协程

  print('第{}个任务:任务完成!'.format(i))ci

  #定义第2个协程,用于通知任务进行状态

  async def mission_running():

  print('任务正在执行...')

  start = time.time()

  #建立一个循环

  loop = asyncio.get_event_loop()

  #建立一个任务盒子tasks,包含了3个须要完成的任务 , 建立task有两种方法 第1种: loop.create_task(coroutine) 第二种: asyncio.ensure_future()

  tasks = [asyncio.ensure_future(to_do_something(5)),

  asyncio.ensure_future(to_do_something(2)),

  asyncio.ensure_future(to_do_something(8)),

  asyncio.ensure_future(mission_running())]

  #tasks接入loop中开始运行郑州作人流多少钱 http://www.120zzzzyy.com/

  loop.run_until_complete(asyncio.wait(tasks))

  end = time.time()

  print(end-start)

  并发请求100次百度首页只需1秒钟

  import aiohttp

  import aiohttp, asyncio, time

  async def get(url):

  async with aiohttp.ClientSession() as session:

  async with session.get(url) as response:

  print(await response)

  async def request():

  url = 'http://www.baidu.com'

  resulit = await get(url)

  _now = lambda : time.time()

  start = _now()

  tasks = [asyncio.ensure_future(request()) for _ in range(100)]

  loop = asyncio.get_event_loop()

  loop.run_until_complete(asyncio.wait(tasks))

  print(_now()-start)

相关文章
相关标签/搜索