官方文档:
https://docs.python.org/zh-cn/3/library/asyncio.html
1:简单的协成体验
import asyncio
import time
async def a():
# 这里的await是将主协成挂起,去执行其他异步程序或含有"__await__"的对象
await asyncio.sleep(2)
await b()
print("a协成结束")
async def b():
for i in range(10,20):
# await asyncio.sleep(1)
print(i)
asyncio.run(a())
以上代码执行流程
2:并发协成的使用
import asyncio
async def a(aa):
print(aa)
await asyncio.sleep(2)
print("hello")
async def b():
print("b_nihao")
await asyncio.sleep(3)
print("b_hello")
loop = asyncio.get_event_loop()
tasks = [a(66), b()]
loop.run_until_complete(asyncio.wait(tasks))
可以打印出来看看是如何跳转执行的,是一个并发的行为.
3:母子协成
import asyncio
from grpclib.client import Channel
# generated by protoc
from .helloworld_pb2 import HelloRequest, HelloReply
from .helloworld_grpc import GreeterStub
# 启动一个main()函数的协成,当有新请求过来,在这个main协成下面再启动一个协成,提高吞吐量
async def main():
async with Channel('127.0.0.1', 50051) as channel:
greeter = GreeterStub(channel)
reply = await greeter.SayHello(HelloRequest(name='Dr. Strange'))
print(reply.message)
if __name__ == '__main__':
asyncio.run(main())