Skip to content

Commit

Permalink
[3.12] pythongh-126417: Register multiprocessing proxy types to an ap…
Browse files Browse the repository at this point in the history
…propriate collections.abc class (python#126419) (python#126436)

Co-authored-by: Stephen Morton <github@tungol.org>
  • Loading branch information
AlexWaygood and tungol authored Nov 5, 2024
1 parent aa5498d commit 47d48b6
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Lib/multiprocessing/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import threading
import signal
import array
import collections.abc
import queue
import time
import types
Expand Down Expand Up @@ -1160,6 +1161,8 @@ def __imul__(self, value):
return self


collections.abc.MutableSequence.register(BaseListProxy)

DictProxy = MakeProxyType('DictProxy', (
'__contains__', '__delitem__', '__getitem__', '__iter__', '__len__',
'__setitem__', 'clear', 'copy', 'get', 'items',
Expand All @@ -1169,6 +1172,7 @@ def __imul__(self, value):
'__iter__': 'Iterator',
}

collections.abc.MutableMapping.register(DictProxy)

ArrayProxy = MakeProxyType('ArrayProxy', (
'__len__', '__getitem__', '__setitem__'
Expand Down
9 changes: 9 additions & 0 deletions Lib/test/_test_multiprocessing.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import functools
import signal
import array
import collections.abc
import socket
import random
import logging
Expand Down Expand Up @@ -2331,6 +2332,10 @@ def test_list(self):
a.append('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):
a = self.list(list(range(10)))
it = iter(a)
Expand Down Expand Up @@ -2371,6 +2376,10 @@ def test_dict(self):
self.assertEqual(sorted(d.values()), [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):
d = self.dict()
indices = list(range(65, 70))
Expand Down
1 change: 1 addition & 0 deletions Misc/ACKS
Original file line number Diff line number Diff line change
Expand Up @@ -1259,6 +1259,7 @@ Emily Morehouse
Derek Morr
James A Morrison
Martin Morrison
Stephen Morton
Derek McTavish Mounce
Alessandro Moura
Pablo Mouzo
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit 47d48b6

Please sign in to comment.