mirror of
https://github.com/python/cpython.git
synced 2025-11-20 02:50:14 +00:00
gh-99741: Clean Up the _xxsubinterpreters Module (gh-99940)
This cleanup up resolves a few subtle bugs and makes the implementation for multi-phase init much cleaner. https://github.com/python/cpython/issues/99741
This commit is contained in:
parent
ab02262cd0
commit
0547a981ae
4 changed files with 659 additions and 317 deletions
|
|
@ -386,7 +386,6 @@ class ShareableTypeTests(unittest.TestCase):
|
|||
self._assert_values([
|
||||
b'spam',
|
||||
9999,
|
||||
self.cid,
|
||||
])
|
||||
|
||||
def test_bytes(self):
|
||||
|
|
@ -1213,6 +1212,18 @@ class ChannelIDTests(TestBase):
|
|||
self.assertFalse(cid1 != cid2)
|
||||
self.assertTrue(cid1 != cid3)
|
||||
|
||||
def test_shareable(self):
|
||||
chan = interpreters.channel_create()
|
||||
|
||||
obj = interpreters.channel_create()
|
||||
interpreters.channel_send(chan, obj)
|
||||
got = interpreters.channel_recv(chan)
|
||||
|
||||
self.assertEqual(got, obj)
|
||||
self.assertIs(type(got), type(obj))
|
||||
# XXX Check the following in the channel tests?
|
||||
#self.assertIsNot(got, obj)
|
||||
|
||||
|
||||
class ChannelTests(TestBase):
|
||||
|
||||
|
|
@ -1545,6 +1556,19 @@ class ChannelTests(TestBase):
|
|||
self.assertEqual(obj5, b'eggs')
|
||||
self.assertIs(obj6, default)
|
||||
|
||||
def test_recv_sending_interp_destroyed(self):
|
||||
cid = interpreters.channel_create()
|
||||
interp = interpreters.create()
|
||||
interpreters.run_string(interp, dedent(f"""
|
||||
import _xxsubinterpreters as _interpreters
|
||||
_interpreters.channel_send({cid}, b'spam')
|
||||
"""))
|
||||
interpreters.destroy(interp)
|
||||
|
||||
with self.assertRaisesRegex(RuntimeError,
|
||||
'unrecognized interpreter ID'):
|
||||
interpreters.channel_recv(cid)
|
||||
|
||||
def test_run_string_arg_unresolved(self):
|
||||
cid = interpreters.channel_create()
|
||||
interp = interpreters.create()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue