From 3bfbf57fdd45ff4340e564c4ab4f7fb65d2d5e5d Mon Sep 17 00:00:00 2001 From: Michael Cooper Date: Thu, 13 Aug 2020 09:04:34 +1000 Subject: [PATCH 1/2] Use a thread local to try to keepalive --- react_render/core.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/react_render/core.py b/react_render/core.py index 8d19dda..d12414e 100644 --- a/react_render/core.py +++ b/react_render/core.py @@ -1,10 +1,26 @@ import os import json +import threading + import requests from react_render.exceptions import ComponentSourceFileNotFound, ComponentRenderingError DEFAULT_SERVICE_URL = 'http://localhost:63578/render' +_requests_session_store = threading.local() + + +def requests_keepalive_session(name) -> requests.Session: + """ + Creates a session that can utilize keep-alive behaviour across multiple + requests, by maintaining the session within a thread-local. + """ + session = getattr(_requests_session_store, name, None) + if not session: + session = requests.Session() + setattr(_requests_session_store, name, session) + return session + def render_component(path_to_source, props=None, to_static_markup=False, json_encoder=None, service_url=None, timeout=10): if not os.path.exists(path_to_source): @@ -16,7 +32,8 @@ def render_component(path_to_source, props=None, to_static_markup=False, json_en if service_url is None: service_url = DEFAULT_SERVICE_URL - response = requests.post(service_url, + session = requests_keepalive_session() + response = session.post(service_url, timeout=timeout, headers={'Content-Type': 'application/json'}, data=json_encoder({ From 9378dde314e39de67cc6de08da118c53c8296ba8 Mon Sep 17 00:00:00 2001 From: Michael Cooper Date: Thu, 13 Aug 2020 09:09:23 +1000 Subject: [PATCH 2/2] Set a name --- react_render/core.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/react_render/core.py b/react_render/core.py index d12414e..4280f64 100644 --- a/react_render/core.py +++ b/react_render/core.py @@ -10,15 +10,15 @@ _requests_session_store = threading.local() -def requests_keepalive_session(name) -> requests.Session: +def requests_keepalive_session() -> requests.Session: """ Creates a session that can utilize keep-alive behaviour across multiple requests, by maintaining the session within a thread-local. """ - session = getattr(_requests_session_store, name, None) + session = getattr(_requests_session_store, "react_session", None) if not session: session = requests.Session() - setattr(_requests_session_store, name, session) + setattr(_requests_session_store, "react_session", session) return session