zoukankan      html  css  js  c++  java
  • 使用gevent实现高并发并限制最大并发数

    import time
    import gevent
    from gevent.pool import Pool
    from gevent import monkey
    # 一,定义最大并发数
    p = Pool(20)
    # 二,导入gevent猴子补丁,没有它,协称就不会并发执行
    
    monkey.patch_all()
    
    
    #  三,耗时任务或者阻塞任务,异步执行的或者需要并发的就是它了
    def task(i):
        time.sleep(i)
        print("----这里---------")
    
    
    # 四,任务派发,将15个任务派发给协程去做
    threads = [p.spawn(task, 5) for i in range(15)]
    
    # 五,在此阻塞,等所有协程全部完成退出,这一步才执行完
    gevent.joinall(threads)

     以上demo代码,就实现了:最大并发数20,超过20个并发,排队等待;

    上述代码中,单个协程耗时五秒,那么并发15个,全部耗时,应该也是5秒多一点点。加入一个时间,来看看是不是真的。比如

    import time
    import gevent
    from gevent.pool import Pool
    from gevent import monkey
    # 一,定义最大并发数
    p = Pool(20)
    # 二,导入gevent猴子补丁,没有它,协称就不会并发执行
    
    monkey.patch_all()
    
    
    #  三,耗时任务或者阻塞任务,异步执行的或者需要并发的就是它了
    def task(i):
        time.sleep(i)
        print("----这里---------")
    
    time_l=time.time()
    # 四,任务派发,将15个任务派发给携程去做
    threads = [p.spawn(task, 5) for i in range(15)]
    
    # 五,在此阻塞,等所有协程全部完成退出,这一步才执行完
    gevent.joinall(threads)
    
    time_r=time.time()
    print("总耗时:{}".format(time_r-time_l))

    执行结果:

    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    ----这里---------
    总耗时:5.004504919052124
    
    Process finished with exit code 0
    

     就这样,实现了高并发,并且可以限制最大并发数

  • 相关阅读:
    图片一句话木马简单制作方法
    kali各工具使用介绍
    隐写工具zsteg安装及使用教程
    内网渗透中mimikatz的使用
    kali meterpreter中mimikatz模块获取密码
    一个恐怖份子上传了这张照片到社交网络。里面藏了什么信息?
    攻防世界MISC进阶之签到题
    EMC存储重装系统分区丢失恢复方法
    服务器数据迁移方法
    教您分辨U盘不能识别是哪儿坏了
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/12899948.html
Copyright © 2011-2022 走看看