本文介绍了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:催生大量绿皮书的不利因素是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!