1、协程和线程的区别是什么?
1# 第三方扩展库、实现协程
2
3import gevent
4
5def unit(name):
6
7 for i in range(3):
8
9 print('当前协程: ', name)
10
11 print('业务循环: ',i)
12
13 # 这里的耗时操作需要使用gevent提供的sleep()函数
14
15 gevent.sleep(1)
16
17if __name__ == "__main__":
18
19 # 创建三个协程
20
21 ge1 = gevent.spawn(unit, '协程1')
22
23 ge2 = gevent.spawn(unit, '协程2')
24
25 ge3 = gevent.spawn(unit, '协程3')
26
27 # 等待协程
28
29 ge1.join()
30
31 ge2.join()
32
33 ge3.join()
1# 分析:在加上协程的sleep()函数等待后,可以发现每执行到一个循环的等待时间时就不会立即进行下一个循环打印。
2# 而是下一个协程进来执行,因此就会下面的输出结果。
3# 当前协程: 协程1
4# 业务循环: 0
5# 当前协程: 协程2
6# 业务循环: 0
7# 当前协程: 协程3
8# 业务循环: 0
9# 当前协程: 协程1
10# 业务循环: 1
11# 当前协程: 协程2
12# 业务循环: 1
13# 当前协程: 协程3
14# 业务循环: 1
15# 当前协程: 协程1
16# 业务循环: 2
17# 当前协程: 协程2
18# 业务循环: 2
19# 当前协程: 协程3
20# 业务循环: 2
21
22# 分析:如果取消协程等待,则打印出的结果应该是下面,只有同一个协程结果执行完毕后再执行下一个协程。
23# 当前协程: 协程1
24# 业务循环: 0
25# 当前协程: 协程1
26# 业务循环: 1
27# 当前协程: 协程1
28# 业务循环: 2
29# 当前协程: 协程2
30# 业务循环: 0
31# 当前协程: 协程2
32# 业务循环: 1
33# 当前协程: 协程2
34# 业务循环: 2
35# 当前协程: 协程3
36# 业务循环: 0
37# 当前协程: 协程3
38# 业务循环: 1
39# 当前协程: 协程3
40# 业务循环: 2
联系客服