使用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

 就這樣,實現了高並發,並且可以限制最大並發數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM