|
@@ -148,7 +148,13 @@ static PyObject *py_push_data(PyObject *self, PyObject *args){
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
//
|
|
//
|
|
- int ret_val = push_data(socket, bytes_total, buffer, buffer_len);
|
|
|
|
|
|
+ int ret_val;
|
|
|
|
+ Py_BEGIN_ALLOW_THREADS
|
|
|
|
+ // GIL is unlocked, but don't do expensive operations in
|
|
|
|
+ // other threads or it might slow this one down
|
|
|
|
+ ret_val = push_data(socket, bytes_total, buffer, buffer_len);
|
|
|
|
+ Py_END_ALLOW_THREADS
|
|
|
|
+ //
|
|
PyObject* py_ret_val = PyLong_FromLong(ret_val);
|
|
PyObject* py_ret_val = PyLong_FromLong(ret_val);
|
|
//
|
|
//
|
|
return py_ret_val;
|
|
return py_ret_val;
|
|
@@ -165,7 +171,13 @@ static PyObject *py_pull_data(PyObject *self, PyObject *args){
|
|
}
|
|
}
|
|
//
|
|
//
|
|
double elapsed_time = 0;
|
|
double elapsed_time = 0;
|
|
- int ret_val = pull_data(socket, bytes_total, buffer_len, &elapsed_time);
|
|
|
|
|
|
+ int ret_val;
|
|
|
|
+ Py_BEGIN_ALLOW_THREADS
|
|
|
|
+ // GIL is unlocked, but don't do expensive operations in
|
|
|
|
+ // other threads or it might slow this one down
|
|
|
|
+ ret_val = pull_data(socket, bytes_total, buffer_len, &elapsed_time);
|
|
|
|
+ Py_END_ALLOW_THREADS
|
|
|
|
+ //
|
|
PyObject* py_ret_val = Py_BuildValue("(id)", ret_val, elapsed_time);
|
|
PyObject* py_ret_val = Py_BuildValue("(id)", ret_val, elapsed_time);
|
|
//
|
|
//
|
|
return py_ret_val;
|
|
return py_ret_val;
|