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 协程的主要内容,如果未能解决你的问题,请参考以下文章