使用asyncio


asyncio

example1:

def generate():
    print("1")
    yield 2
    print("3")
    yield 4
a = generate()
print(a)


结论:
创建生成器时,里面的代码不会执行。

example2:

def generate():
    print("s1")
    yield 2
    print("s3")
    yield 4
a = generate()
print(a.send(None))
s1
2

结论:
使用send调用一次生成器,它会执行到第一个yield,并且send方法的返回值就是yield返回的值。

这个特性实现非阻塞io原理:

前提

  1. 用户知道哪些是io操作,也就是知道那个函数是io函数,比如read,send 这种
  2. 用户知道什么时候io操作结束,有结果返回