美文网首页
gevent完成多任务(!!常用)

gevent完成多任务(!!常用)

作者: 栀心_d553 | 来源:发表于2020-02-11 12:09 被阅读0次

    recfrom() connect() accept()都是阻塞,都可以利用这段时间,切换别的任务

    但是在gevent中想用的话,必须写gevent.recfrom(),其他的也一样

    猴子补丁,可以在内存中自动添加gevent

    代码:

    
    import gevent
    import time
    from gevent import monkey
    monkey.patch_all()
    #h猴子补丁的作用:在内存中,把所有的time换成gevent,保证代码在最后执行的时候
    #不出错
    def f1(n):
        for i in range(n):
            print(gevent.getcurrent(), i)
            # time.sleep(0.5)
            gevent.sleep(0.5)
    def f2(n):
        for i in range(n):
            print(gevent.getcurrent(), i)
            # time.sleep(0.5)
            gevent.sleep(0.5)
    def f3(n):
        for i in range(n):
            print(gevent.getcurrent(), i)
            # time.sleep(0.5)
            gevent.sleep(0.5)
    g1 = gevent.spawn(f1, 5)
    #代表创建出了一个对象,但是并不执行。f1表示运行f1,5代表执行5次
    g2 = gevent.spawn(f2, 5)
    g3 = gevent.spawn(f3, 5)
    #在创建对象的过程中,上面的代码是不会执行的
    g1.join()
    #延时的时候,会切换任务,没有延时就不会切换
    #会先进入f1,执行到sleep的时候遇到延时
    #然后利用这个时间,查看f2....
    g2.join()
    g3.join()
    
    
    
    
    
    
    #一个程序一启动,就把程序称之为进程,进程是资源分配的单位,
    #线程执行代码,多任务就可以多线程,上面的代码仍然是单线程,利用的是等待的时间
    #也就是协程。
    #协程依赖于线程,线程依赖于进程。
    #协程就相当于调了一个函数,所以利用效率很高
    
    

    相关文章

      网友评论

          本文标题:gevent完成多任务(!!常用)

          本文链接:https://www.haomeiwen.com/subject/fvgtfhtx.html