aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/db.py2
-rw-r--r--python/analytics/index_data.py10
-rw-r--r--python/db.py15
-rw-r--r--python/yieldcurve.py5
4 files changed, 18 insertions, 14 deletions
diff --git a/python/analytics/db.py b/python/analytics/db.py
index 4abfd813..fd19833e 100644
--- a/python/analytics/db.py
+++ b/python/analytics/db.py
@@ -1 +1 @@
-from db import serenitas_engine, dawn_engine, DataError
+from db import serenitas_engine, dawn_engine, DataError, serenitas_pool
diff --git a/python/analytics/index_data.py b/python/analytics/index_data.py
index 0fd06ff0..8c769a03 100644
--- a/python/analytics/index_data.py
+++ b/python/analytics/index_data.py
@@ -1,4 +1,4 @@
-from .db import serenitas_engine
+from .db import serenitas_engine, serenitas_pool
from dates import bond_cal
import numpy as np
@@ -158,7 +158,6 @@ def build_curve(r, tenors, currency="USD"):
spread_curve = 1e-4 * np.array(r['spread_curve'], dtype='float')
upfront_curve = 1e-2 * np.array(r['upfront_curve'], dtype='float')
recovery_curve = np.array(r['recovery_curve'], dtype='float')
-
yc = get_curve(r['date'], currency)
try:
sc = SpreadCurve(r['date'], yc, None, None, None,
@@ -203,8 +202,9 @@ def get_singlenames_curves(index_type, series, trade_date,
def get_tranche_quotes(index_type, series, tenor, date=datetime.date.today()):
- conn = serenitas_engine.raw_connection()
+ conn = serenitas_pool.getconn()
with conn.cursor() as c:
c.callproc("get_tranche_quotes", (index_type, series, tenor, date))
- return pd.DataFrame.from_records(dict(d) for d in c)
- conn.close()
+ df = pd.DataFrame.from_records(dict(d) for d in c)
+ serenitas_pool.putconn(conn)
+ return df
diff --git a/python/db.py b/python/db.py
index 3535ad1f..b8e72c7b 100644
--- a/python/db.py
+++ b/python/db.py
@@ -4,11 +4,11 @@ import psycopg2
from psycopg2.extras import DictCursor
from psycopg2 import IntegrityError, DataError
from psycopg2.extensions import register_adapter, AsIs
-from psycopg2.pool import SimpleConnectionPool
+from psycopg2.pool import ThreadedConnectionPool
from sqlalchemy import create_engine
from sqlalchemy.engine.url import URL
import numpy as np
-
+import atexit
class InfDateAdapter:
def __init__(self, wrapped):
@@ -86,10 +86,13 @@ def query_db(conn, sqlstr, params=None, one=True):
r = c.fetchone() if one else c.fetchall()
return r
-serenitas_pool = SimpleConnectionPool(2, 5, database='serenitasdb',
- user='serenitas_user',
- host=os.environ.get("PGHOST", "debian"),
- cursor_factory=None)
+serenitas_pool = ThreadedConnectionPool(3, 5, database='serenitasdb',
+ user='serenitas_user',
+ host=os.environ.get("PGHOST", "debian"),
+ cursor_factory=DictCursor)
+@atexit.register
+def close_db():
+ serenitas_pool.closeall()
serenitas_engine = dbengine('serenitasdb')
dawn_engine = dbengine('dawndb')
diff --git a/python/yieldcurve.py b/python/yieldcurve.py
index 230a7acd..997c7ad0 100644
--- a/python/yieldcurve.py
+++ b/python/yieldcurve.py
@@ -18,7 +18,7 @@ from quantlib.time.date import pydate_from_qldate
import numpy as np
from quantlib.quotes import SimpleQuote
-from db import serenitas_engine
+from db import dbconn, serenitas_engine
from pyisda.curve import YieldCurve
from pyisda.date import BadDay
import warnings
@@ -30,7 +30,8 @@ def load_curves(currency="USD", date=None):
if date:
sql_str += " WHERE effective_date=%s"
- with closing(serenitas_engine.raw_connection()) as conn:
+
+ with closing(dbconn('serenitasdb')) as conn:
with conn.cursor() as c:
if date:
c.execute(sql_str, (date,))