Python:gevent,自动切换示例,gevent.joinall()

 用于实现任务的自由切换

安装pip3 install gevent 

#创建协程对象:gevent.spawn(func函数名,参数)

#gevent.spawn(funa,1,2,x=4)

join:阻塞,直到这个协程执行完毕

基本:

import gevent#导入模块
def write():
    print('homework')
    print('finish')
def eat():
    print('snack')
    print('over')

g1=gevent.spawn(write)
g2=gevent.spawn(eat)

g1.join()#等待g1执行完毕
g2.join()

import gevent#导入模块

def funa(n):
    for i in range(n):
        print(gevent.getcurrent(),i)#返回正在执行的greenlet
        gevent.sleep(1)#用来模拟一个耗时操作,注意不是time模块中的sleep

g1=gevent.spawn(funa,2)#2表示funa参数
g2=gevent.spawn(funa,2)
g3=gevent.spawn(funa,2)

g1.join()#等待g1执行完毕,按顺序执行
g2.join()
g3.join()

gevent.sleep() 与time.sleep()都可以用,但是gevent不能直接识别time模块

#from gevent import monkey

import gevent,time#导入模块
from gevent import monkey

monkey.patch_all()  #打补丁,将程序中用到耗时操作的代码,换为gevent中实现的模块

def task(name):
    for i in range(3):
        print(f'函数名是:{name},i的值是:{i}')
        time.sleep(1)#打补丁操作
#创建协程        
g1=gevent.spawn(task,'lihailu')
g2=gevent.spawn(task,'lihai')

g1.join()
g2.join()

gevent.joinall()方法的参数是一个协程的对象列表,它会等待所有的协程都执行完毕后再退出

import gevent,time#导入模块
from gevent import monkey 
monkey.patch_all() #打补丁,将程序中用到耗时操作的代码,换为gevent中实现的模块
def task(name):
    for i in range(3):
        print(f'函数名是:{name},i的值是:{i}')
        time.sleep(1)#打补丁操作,或者直接gevent.sleep(1)

gevent.joinall([gevent.spawn(task,'task1'),gevent.spawn(task,'task2')])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值