一、实现异步
1 '''
2 @Author :Lucian Lu
3 @Date :2021/12/22 13:57
4 '''
5 import time, threading
6
7
8 def genCoroutine(func):
9 def wrapper(*args, **kwargs):
10 gen1 = func()
11 gen2 = next(gen1) # 此时表示执行的是reqa这个生成器
12 def run(g):
13 res = next(g) # 此时表示执行的是longIo这个生成器
14 try:
15 gen1.send(res)
16 except StopIteration as e:
17 pass
18
19 threading.Thread(target=run, args=(gen2,)).start()
20
21 return wrapper
22
23
24 def longIo():
25 print('开始耗时操作')
26 time.sleep(5)
27 print('结束耗时操作')
28 yield "luyizhou is good man"
29
30
31 @genCoroutine
32 def reqa():
33 print('开始处理A')
34 res = yield longIo()
35 print('接收到longIO的响应数据:', res)
36 print('结束处理a')
37
38
39 def reqb():
40 print('开始处理B')
41 time.sleep(2)
42 print('结束处理b')
43
44
45 def main():
46 reqa()
47 reqb()
48 while True:
49 time.sleep(0.1)
50 pass
51
52
53 if __name__ == '__main__':
54 main()