mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
GH-111435: Add Support for Sharing True and False Between Interpreters (gh-111436)
This only affects users of the APIs in pycore_crossinterp.h (AKA _xxsubinterpretersmodule.c and _xxinterpchannels.c).
This commit is contained in:
parent
9322ce90ac
commit
230e8e924d
4 changed files with 33 additions and 4 deletions
|
@ -102,6 +102,8 @@ class IsShareableTests(unittest.TestCase):
|
||||||
'spam',
|
'spam',
|
||||||
10,
|
10,
|
||||||
-10,
|
-10,
|
||||||
|
True,
|
||||||
|
False,
|
||||||
100.0,
|
100.0,
|
||||||
]
|
]
|
||||||
for obj in shareables:
|
for obj in shareables:
|
||||||
|
@ -121,8 +123,6 @@ class IsShareableTests(unittest.TestCase):
|
||||||
|
|
||||||
not_shareables = [
|
not_shareables = [
|
||||||
# singletons
|
# singletons
|
||||||
True,
|
|
||||||
False,
|
|
||||||
NotImplemented,
|
NotImplemented,
|
||||||
...,
|
...,
|
||||||
# builtin types and objects
|
# builtin types and objects
|
||||||
|
@ -189,6 +189,9 @@ class ShareableTypeTests(unittest.TestCase):
|
||||||
with self.assertRaises(OverflowError):
|
with self.assertRaises(OverflowError):
|
||||||
_testinternalcapi.get_crossinterp_data(i)
|
_testinternalcapi.get_crossinterp_data(i)
|
||||||
|
|
||||||
|
def test_bool(self):
|
||||||
|
self._assert_values([True, False])
|
||||||
|
|
||||||
def test_float(self):
|
def test_float(self):
|
||||||
self._assert_values([0.0, 1.1, -1.0, 0.12345678, -0.12345678])
|
self._assert_values([0.0, 1.1, -1.0, 0.12345678, -0.12345678])
|
||||||
|
|
||||||
|
|
|
@ -778,6 +778,8 @@ class TestIsShareable(TestBase):
|
||||||
'spam',
|
'spam',
|
||||||
10,
|
10,
|
||||||
-10,
|
-10,
|
||||||
|
True,
|
||||||
|
False,
|
||||||
100.0,
|
100.0,
|
||||||
]
|
]
|
||||||
for obj in shareables:
|
for obj in shareables:
|
||||||
|
@ -797,8 +799,6 @@ class TestIsShareable(TestBase):
|
||||||
|
|
||||||
not_shareables = [
|
not_shareables = [
|
||||||
# singletons
|
# singletons
|
||||||
True,
|
|
||||||
False,
|
|
||||||
NotImplemented,
|
NotImplemented,
|
||||||
...,
|
...,
|
||||||
# builtin types and objects
|
# builtin types and objects
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Added support for sharing of bool type with interpreters API.
|
|
@ -693,6 +693,26 @@ _none_shared(PyThreadState *tstate, PyObject *obj,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_new_bool_object(_PyCrossInterpreterData *data)
|
||||||
|
{
|
||||||
|
if (data->data){
|
||||||
|
Py_RETURN_TRUE;
|
||||||
|
}
|
||||||
|
Py_RETURN_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_bool_shared(PyThreadState *tstate, PyObject *obj,
|
||||||
|
_PyCrossInterpreterData *data)
|
||||||
|
{
|
||||||
|
_PyCrossInterpreterData_Init(data, tstate->interp,
|
||||||
|
(void *) (Py_IsTrue(obj) ? (uintptr_t) 1 : (uintptr_t) 0), NULL,
|
||||||
|
_new_bool_object);
|
||||||
|
// data->obj and data->free remain NULL
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry)
|
_register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry)
|
||||||
{
|
{
|
||||||
|
@ -716,6 +736,11 @@ _register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry)
|
||||||
Py_FatalError("could not register str for cross-interpreter sharing");
|
Py_FatalError("could not register str for cross-interpreter sharing");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// bool
|
||||||
|
if (_xidregistry_add_type(xidregistry, &PyBool_Type, _bool_shared) != 0) {
|
||||||
|
Py_FatalError("could not register bool for cross-interpreter sharing");
|
||||||
|
}
|
||||||
|
|
||||||
// float
|
// float
|
||||||
if (_xidregistry_add_type(xidregistry, &PyFloat_Type, _float_shared) != 0) {
|
if (_xidregistry_add_type(xidregistry, &PyFloat_Type, _float_shared) != 0) {
|
||||||
Py_FatalError("could not register float for cross-interpreter sharing");
|
Py_FatalError("could not register float for cross-interpreter sharing");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue