python 协程

Posted 乘风去破浪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 协程相关的知识,希望对你有一定的参考价值。

 1 """
 2 协程,运行的时候轮流去执行各个任务,如果生产者生产的速度比较慢,这里可以使用者个切换出去
 3 
 4 greenlet 会交出执行权,但是如果后面的耗时任务也不会就进入耗时,等下次轮到了,还是要进行耗时
 5 这个程序的效果就只能够是轮询,起不到实际的节约时间的效果
 6 """
 7 import time
 8 from datetime import datetime
 9 from greenlet import greenlet
10 
11 
12 def task1():
13     for i in range(5):
14         print(datetime.now(), ": task1---" + str(i))
15         g2.switch()
16         time.sleep(2)
17 
18 
19 def task2():
20     for i in range(5):
21         print(datetime.now(), ": task2---" + str(i))
22         g3.switch()
23         time.sleep(2)
24 
25 
26 def task3():
27     for i in range(5):
28         print(datetime.now(), ": task3---" + str(i))
29         g1.switch()
30         time.sleep(2)  # 代表耗时任务
31 
32 
33 if __name__ == __main__:
34     g1 = greenlet(task1)
35     g2 = greenlet(task2)
36     g3 = greenlet(task3)
37     g1.switch()
38     print("over")

 

 

 

 

 1 """
 2 协程,运行的时候轮流去执行各个任务,如果生产者生产的速度比较慢,这里可以使用者个切换出去
 3 
 4 yield 会交出执行权,但是如果后面的耗时任务也不会就进入耗时,等下次轮到了,还是要进行耗时
 5 这个程序的效果就只能够是轮询,起不到实际的节约时间的效果
 6 """
 7 import time
 8 from datetime import datetime
 9 
10 
11 def task1():
12     for i in range(5):
13         print(datetime.now(), ": task1---" + str(i))
14         yield
15         time.sleep(2)
16 
17 def task2():
18     for i in range(5):
19         print(datetime.now(), ": task2---" + str(i))
20         yield
21         time.sleep(2)
22 
23 def task3():
24     for i in range(5):
25         print(datetime.now(), ": task3---" + str(i))
26         yield
27         time.sleep(2)  # 代表耗时任务
28 
29 
30 
31 if __name__ == __main__:
32     g1 = task1()
33     g2 = task2()
34     g3 = task3()
35     while True:
36         try:
37             next(g1)
38             next(g2)
39             next(g3)
40         except:
41             break
42     print("over")

 

以上是关于python 协程的主要内容,如果未能解决你的问题,请参考以下文章

Python中的协程与asyncio原理

Python中的协程与asyncio原理

Python中的协程与asyncio原理

python3之协程

python协程

python协程