gevent: downside to spawning large number of greenlets?(GEvent:催生大量绿皮书的不利因素是什么?)
本文介绍了GEvent:催生大量绿皮书的不利因素是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
从我在评论中的问题到this answer到问题"Gevent pool with nested web requests":
假设一个人有大量的任务,使用gvent.spawn(...)同时生成所有它们,而不是使用GEvent池和pool.spawn(...)要限制并发小纸币的数量?
换一种说法:即使要解决的问题不是必需的,但对gvent.pool进行"限制并发"有什么好处吗?
你知道什么是这个问题的"大数字"吗?
推荐答案
在处理很多事情时,它更干净,也是一种很好的做法。几周前,我遇到了这种情况,当时我正在使用GEVENT SPOWN根据30K:)数量级的DNS来验证一堆电子邮件。
from gevent.pool import Pool
import logging
rows = [ ... a large list of stuff ...]
CONCURRENCY = 200 # run 200 greenlets at once or whatever you want
pool = Pool(CONCURRENCY)
count = 0
def do_work_function(param1,param2):
print param1 + param2
for row in rows:
count += 1 # for logging purposes to track progress
logging.info(count)
pool.spawn(do_work_function,param1,param2) # blocks here when pool size == CONCURRENCY
pool.join() #blocks here until the last 200 are complete
我在测试中发现,当并发数为200左右时,我的机器负载将在EC2 m1.mall上徘徊在1左右。不过,我这样做有点天真,如果我要再次这样做,我会运行多个池,并在它们之间休眠一段时间,以尝试更均匀地分配NIC和CPU上的负载。
要记住的最后一件事是关注打开的文件,并在需要时增加打开的文件:http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files。我运行的greenlet占用了每个greenlet大约5个文件描述符,所以如果您不小心的话可能很快就会用完。如果您的系统负载高于1,这可能没有帮助,因为无论如何,您都会开始看到收益递减。这篇关于GEvent:催生大量绿皮书的不利因素是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:GEvent:催生大量绿皮书的不利因素是什么?
猜你喜欢
- 我如何卸载 PyTorch? 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01