GEvent:催生大量绿皮书的不利因素是什么?

本教程将介绍GEvent:催生大量绿皮书的不利因素是什么?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

GEvent:催生大量绿皮书的不利因素是什么? 教程 第1张

问题描述

从我在评论中的问题到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:催生大量绿皮书的不利因素是什么?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。