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