mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
GH-111438: Add Support for Sharing Floats Between Interpreters (gh-111439)
This only affects users of the APIs in pycore_crossinterp.h (AKA _xxsubinterpretersmodule.c and _xxinterpchannels.c).
This commit is contained in:
parent
2904d99839
commit
ad6380bc34
4 changed files with 34 additions and 2 deletions
|
@ -585,6 +585,29 @@ _long_shared(PyThreadState *tstate, PyObject *obj,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
_new_float_object(_PyCrossInterpreterData *data)
|
||||
{
|
||||
double * value_ptr = data->data;
|
||||
return PyFloat_FromDouble(*value_ptr);
|
||||
}
|
||||
|
||||
static int
|
||||
_float_shared(PyThreadState *tstate, PyObject *obj,
|
||||
_PyCrossInterpreterData *data)
|
||||
{
|
||||
if (_PyCrossInterpreterData_InitWithSize(
|
||||
data, tstate->interp, sizeof(double), NULL,
|
||||
_new_float_object
|
||||
) < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
double *shared = (double *)data->data;
|
||||
*shared = PyFloat_AsDouble(obj);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
_new_none_object(_PyCrossInterpreterData *data)
|
||||
{
|
||||
|
@ -624,4 +647,9 @@ _register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry)
|
|||
if (_xidregistry_add_type(xidregistry, &PyUnicode_Type, _str_shared) != 0) {
|
||||
Py_FatalError("could not register str for cross-interpreter sharing");
|
||||
}
|
||||
|
||||
// float
|
||||
if (_xidregistry_add_type(xidregistry, &PyFloat_Type, _float_shared) != 0) {
|
||||
Py_FatalError("could not register float for cross-interpreter sharing");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue