async/await python 入门 极简易懂例子

Python async/await 入门

理解await

import asyncio
 
async def outer():
  print('in outer')
  print('waiting for result1')
  result1 = await phase1()
  print('waiting for result2')
  result2 = await phase2(result1)
  return (result1, result2)
 
async def phase1():
  print('in phase1')
  return 'result1'
 
async def phase2(arg):
  print('in phase2')
  return 'result2 derived from {}'.format(arg)
 
event_loop = asyncio.get_event_loop() #asyncio.get_event_loop是协程的主线程
try:
  return_value = event_loop.run_until_complete(outer())#run_until_complete运行直到全部完成
  print('return value: {!r}'.format(return_value))
finally:
  event_loop.close()

输出结果如下:
in outer
waiting for result1
in phase1
waiting for result2
in phase2
return value: ('result1', 'result2 derived from result1')

#作者: caimouse 

理解协程的用处

import asyncio,time
 
async def outer():
  print('in outer')
  print('waiting for result1')
  result1 = await phase1()
  print('waiting for result2')
  result2 = await phase2(result1)
  return (result1, result2)
 
async def phase1():
  print('in phase1')
  await asyncio.sleep(3)
  return 'result1'
 
async def phase2(arg):
  print('in phase2')
  return 'result2 derived from {}'.format(arg)

async def phase3():
  for i in range(10):
     print('in phase3')
     await asyncio.sleep(2) 

  return 'result3 '

 
event_loop = asyncio.get_event_loop()
try:
  event_loop.create_task(phase3())
  return_value = event_loop.run_until_complete(outer())
  
 
  print('return value: {!r}'.format(return_value))
finally:
  event_loop.close()

进一步理解协程的用处

import asyncio,time
 
async def outer():
  print('in outer')
  print('waiting for result1')
  result1 = await phase1()
  print('waiting for result2')
  result2 = await phase2(result1)
  return (result1, result2)
 
async def phase1():
  print('in phase1')
  await asyncio.sleep(3)
  print("phase1 end")
  return 'result1'
 
async def phase2(arg):
  print('in phase2')
  return 'result2 derived from {}'.format(arg)

async def phase3():
  for i in range(10):
     print('in phase3')
     await asyncio.sleep(2) 

  return 'result3 '

 
event_loop = asyncio.get_event_loop()
try:
  event_loop.create_task(phase3())
  return_value = event_loop.run_until_complete(outer())
  
 
  print('return value: {!r}'.format(return_value))
finally:
  event_loop.close()



单线协程时await起不到作用(与上个代码运行对比)

import asyncio,time
 
async def outer():
  print('in outer')
  print('waiting for result1')
  result1 = await phase1()
  print('waiting for result2')
  result2 = await phase2(result1)
  return (result1, result2)
 
async def phase1():
  print('in phase1')
  await asyncio.sleep(3)
  print("phase1 end")
  return 'result1'
 
async def phase2(arg):
  print('in phase2')
  return 'result2 derived from {}'.format(arg)

async def phase3():
  for i in range(10):
     print('in phase3')
     await asyncio.sleep(2) 

  return 'result3 '

 
event_loop = asyncio.get_event_loop()
try:
  #event_loop.create_task(phase3())
  return_value = event_loop.run_until_complete(outer())
  
 
  print('return value: {!r}'.format(return_value))
finally:
  event_loop.close()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值