diff --git a/plugins/python/pyloader.c b/plugins/python/pyloader.c index 45b93091..e357c05d 100644 --- a/plugins/python/pyloader.c +++ b/plugins/python/pyloader.c @@ -300,6 +300,19 @@ int init_uwsgi_app(int loader, void *arg1, struct wsgi_request *wsgi_req, PyThre #endif } + // cache most used values + + wi->gateway_version = PyTuple_New(2); + PyTuple_SetItem(wi->gateway_version, 0, PyInt_FromLong(1)); + PyTuple_SetItem(wi->gateway_version, 1, PyInt_FromLong(0)); + Py_INCREF(wi->gateway_version); + + wi->uwsgi_version = PyString_FromString(UWSGI_VERSION); + Py_INCREF(wi->uwsgi_version); + + wi->uwsgi_node = PyString_FromString(uwsgi.hostname); + Py_INCREF(wi->uwsgi_node); + if (uwsgi.threads > 1 && id) { // if we have multiple threads we need to initialize a PyThreadState for each one for(i=0;iasync_environ, "wsgi.file_wrapper", wi->sendfile); #endif @@ -28,12 +19,7 @@ void *uwsgi_request_subhandler_wsgi(struct wsgi_request *wsgi_req, struct uwsgi_ } #endif - // cache this - zero = PyTuple_New(2); - PyTuple_SetItem(zero, 0, PyInt_FromLong(1)); - PyTuple_SetItem(zero, 1, PyInt_FromLong(0)); - PyDict_SetItemString(wsgi_req->async_environ, "wsgi.version", zero); - Py_DECREF(zero); + PyDict_SetItemString(wsgi_req->async_environ, "wsgi.version", wi->gateway_version); zero = PyFile_FromFile(stderr, "wsgi_input", "w", NULL); PyDict_SetItemString(wsgi_req->async_environ, "wsgi.errors", zero); @@ -79,14 +65,13 @@ void *uwsgi_request_subhandler_wsgi(struct wsgi_request *wsgi_req, struct uwsgi_ PyDict_SetItemString(up.embedded_dict, "env", wsgi_req->async_environ); } - zero = PyString_FromString(UWSGI_VERSION); - PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.version", zero); - Py_DECREF(zero); + PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.version", wi->uwsgi_version); if (uwsgi.cores > 1) { PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.core", PyInt_FromLong(wsgi_req->async_id)); } + // cache this ? if (uwsgi.cluster_fd >= 0) { zero = PyString_FromString(uwsgi.cluster); PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.cluster", zero); @@ -96,9 +81,7 @@ void *uwsgi_request_subhandler_wsgi(struct wsgi_request *wsgi_req, struct uwsgi_ Py_DECREF(zero); } - zero = PyString_FromString(uwsgi.hostname); - PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.node", zero); - Py_DECREF(zero); + PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.node", wi->uwsgi_node); #ifdef UWSGI_ROUTING diff --git a/uwsgi.h b/uwsgi.h index be77099a..c6cb9959 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -645,6 +645,10 @@ struct uwsgi_app { char *touch_reload; time_t touch_reload_mtime; + void *gateway_version; + void *uwsgi_version; + void *uwsgi_node; + };