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

2020-02-11  本文已影响0人  栀心_d553

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()






#一个程序一启动,就把程序称之为进程,进程是资源分配的单位,
#线程执行代码,多任务就可以多线程,上面的代码仍然是单线程,利用的是等待的时间
#也就是协程。
#协程依赖于线程,线程依赖于进程。
#协程就相当于调了一个函数,所以利用效率很高

上一篇下一篇

猜你喜欢

热点阅读