zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    【springcloud alibaba】配置中心之nacos
    【springcloud alibaba】注册中心之nacos
    LeetCode计数质数Swift
    LeetCode移除链表元素Swift
    LeetCode删除重复的电子邮箱SQL
    LeetCode汉明距离Swift
    LeetCode两整数之和Swift
    LeetCode从不订购的客户SQL
    LeetCode超过经理收入的员工SQL
    LeetCode组合两个表SQL
  • 原文地址:https://www.cnblogs.com/cfpl/p/12996557.html
Copyright © 2011-2022 走看看