zoukankan      html  css  js  c++  java
  • pythhon_协程&异步IO

    一、协程

        符合协程的条件:

        1、必须在一个单线程中实现并发

        2、一个协程遇见IO操作自动切换到其他协程

        3、修改共享数据不需要加锁

        4、用户程序中自己保存多个控制流的上下文

         Greenlet模块:Gevent模块是一个用c实现协成的模块,请看如下代码中greenlet的使用。但是greenlet并没有实现遇见IO就切换的功能。。。。

     1 from greenlet import greenlet
     2 import time
     3 def func1():
     4     print(1)
     5     time.sleep(2)
     6     gr2.switch()
     7     print(3)
     8     gr2.switch()
     9 def func2():
    10     print(2)
    11     gr1.switch()
    12     print(4)
    13 gr1=greenlet(func1)
    14 gr2=greenlet(func2)
    15 gr1.switch()

          那么如何实现协成遇见IO自动切换另外一个协程的功能?  Gevent模块

          Gevent模块和Greenlet模块差不多,请看:

     1 import gevent,time
     2 def f1():
     3     print(1)
     4     gevent.sleep(1)     #实现上下文的切换  
     5     print(2)
     6 def f2():
     7     print(3)
     8     gevent.sleep(1)
     9     print(4)
    10     time.sleep(1)
    11 def f3():
    12     print(66666666666666666)
    13     gevent.sleep(1)
    14 
    15 gevent.joinall([gevent.spawn(f1),gevent.spawn(f2),gevent.spawn(f3)])
    16 #gevent.spawn(f1)  该协成作用于f1
  • 相关阅读:
    【蓝桥杯】基础练习 十六进制转十进制
    【蓝桥杯】 基础练习 十六进制转八进制
    【蓝桥杯】 入门训练 序列求和
    【蓝桥杯】 入门训练 圆的面积
    【蓝桥杯】入门训练 Fibonacci数列
    6次考试小结
    搜索
    sudoku
    生日蛋糕
    木棒
  • 原文地址:https://www.cnblogs.com/songxiaonan/p/6208115.html
Copyright © 2011-2022 走看看