使用asyncio
asyncio
example1:
def generate():
print("1")
yield 2
print("3")
yield 4
a = generate()
print(a)
<generator object generate at 0x0000013834675AC8>
结论:
创建生成器时,里面的代码不会执行。
example2:
def generate():
print("s1")
yield 2
print("s3")
yield 4
a = generate()
print(a.send(None))
s1
2
结论:
使用send
调用一次生成器,它会执行到第一个yield,并且send方法的返回值就是yield返回的值。
这个特性实现非阻塞io原理:
前提
- 用户知道哪些是io操作,也就是知道那个函数是io函数,比如read,send 这种
- 用户知道什么时候io操作结束,有结果返回