From 35ca156db3fd68a8791edce235096028b86d69ff Mon Sep 17 00:00:00 2001 From: Sergios Aftsidis <safts@noc.grnet.gr> Date: Fri, 22 Apr 2016 10:54:04 +0300 Subject: [PATCH] Use gevent.pool and limit active greenlets --- views/utils.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/views/utils.py b/views/utils.py index a46c19e..0decc76 100644 --- a/views/utils.py +++ b/views/utils.py @@ -7,7 +7,13 @@ from django.conf import settings from network.models import Ifce from rg.models import Graph -import gevent +# import gevent + +from gevent.pool import Pool + +CONCURRECY = 50 +pool = Pool(CONCURRECY) + def last_x_rec(x): @@ -86,10 +92,15 @@ def get_load_for_interfaces(ifces, key, start=None, end=None): def get_load_for_links(ifces, start=None, end=None): response = {} threads = [] + + spawned = 0 for key, val in ifces.iteritems(): # response.update(get_load_for_interfaces(val, key, start, end)) - threads.append(gevent.spawn(get_load_for_interfaces, val, key, start, end)) - gevent.joinall(threads) + threads.append(pool.spawn(get_load_for_interfaces, val, key, start, end)) + spawned += 1 + if spawned == CONCURRECY: + pool.join() + pool.join() for thread in threads: if thread.value: response.update(thread.value) -- GitLab