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操作結束,有結果返回