[3.13] gh-126417: Register multiprocessing proxy types to an appropriate collections.abc class (#126419) (#126435)

Co-authored-by: Stephen Morton <github@tungol.org>
This commit is contained in:
Alex Waygood 2024-11-05 11:22:44 +00:00 committed by GitHub
parent cba17e4d92
commit c1e708ab07
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 16 additions and 0 deletions

View File

@ -18,6 +18,7 @@ import sys
import threading import threading
import signal import signal
import array import array
import collections.abc
import queue import queue
import time import time
import types import types
@ -1167,6 +1168,7 @@ class ListProxy(BaseListProxy):
__class_getitem__ = classmethod(types.GenericAlias) __class_getitem__ = classmethod(types.GenericAlias)
collections.abc.MutableSequence.register(BaseListProxy)
_BaseDictProxy = MakeProxyType('DictProxy', ( _BaseDictProxy = MakeProxyType('DictProxy', (
'__contains__', '__delitem__', '__getitem__', '__iter__', '__len__', '__contains__', '__delitem__', '__getitem__', '__iter__', '__len__',
@ -1179,6 +1181,7 @@ _BaseDictProxy._method_to_typeid_ = {
class DictProxy(_BaseDictProxy): class DictProxy(_BaseDictProxy):
__class_getitem__ = classmethod(types.GenericAlias) __class_getitem__ = classmethod(types.GenericAlias)
collections.abc.MutableMapping.register(_BaseDictProxy)
ArrayProxy = MakeProxyType('ArrayProxy', ( ArrayProxy = MakeProxyType('ArrayProxy', (
'__len__', '__getitem__', '__setitem__' '__len__', '__getitem__', '__setitem__'

View File

@ -16,6 +16,7 @@ import errno
import functools import functools
import signal import signal
import array import array
import collections.abc
import socket import socket
import random import random
import logging import logging
@ -2331,6 +2332,10 @@ class _TestContainers(BaseTestCase):
a.append('hello') a.append('hello')
self.assertEqual(f[0][:], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'hello']) self.assertEqual(f[0][:], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'hello'])
def test_list_isinstance(self):
a = self.list()
self.assertIsInstance(a, collections.abc.MutableSequence)
def test_list_iter(self): def test_list_iter(self):
a = self.list(list(range(10))) a = self.list(list(range(10)))
it = iter(a) it = iter(a)
@ -2371,6 +2376,10 @@ class _TestContainers(BaseTestCase):
self.assertEqual(sorted(d.values()), [chr(i) for i in indices]) self.assertEqual(sorted(d.values()), [chr(i) for i in indices])
self.assertEqual(sorted(d.items()), [(i, chr(i)) for i in indices]) self.assertEqual(sorted(d.items()), [(i, chr(i)) for i in indices])
def test_dict_isinstance(self):
a = self.dict()
self.assertIsInstance(a, collections.abc.MutableMapping)
def test_dict_iter(self): def test_dict_iter(self):
d = self.dict() d = self.dict()
indices = list(range(65, 70)) indices = list(range(65, 70))

View File

@ -1270,6 +1270,7 @@ Emily Morehouse
Derek Morr Derek Morr
James A Morrison James A Morrison
Martin Morrison Martin Morrison
Stephen Morton
Derek McTavish Mounce Derek McTavish Mounce
Alessandro Moura Alessandro Moura
Pablo Mouzo Pablo Mouzo

View File

@ -0,0 +1,3 @@
Register the :class:`!multiprocessing.managers.DictProxy` and :class:`!multiprocessing.managers.ListProxy` types in
:mod:`multiprocessing.managers` to :class:`collections.abc.MutableMapping` and
:class:`collections.abc.MutableSequence`, respectively.