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