diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/db.py | 2 | ||||
| -rw-r--r-- | python/analytics/index_data.py | 10 | ||||
| -rw-r--r-- | python/db.py | 15 | ||||
| -rw-r--r-- | python/yieldcurve.py | 5 |
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,)) |
