summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGareth Rees <gdr@garethrees.org>2017-07-21 10:35:33 (GMT)
committerAntoine Pitrou <pitrou@free.fr>2017-07-21 10:35:33 (GMT)
commit3913bad4957ac30e58a7ffe9279333ad176a8eea (patch)
tree2c6e360c1bf3571401f33232e85609e2316c44d4 /Lib
parent7c5798ebfa9b822d6cedf1fc8c034f6ea90644dc (diff)
downloadcpython-3913bad4957ac30e58a7ffe9279333ad176a8eea.zip
cpython-3913bad4957ac30e58a7ffe9279333ad176a8eea.tar.gz
cpython-3913bad4957ac30e58a7ffe9279333ad176a8eea.tar.bz2
bpo-19896: Add typecodes 'q' and 'Q' to multiprocessing.sharedctypes (#2741)
* bpo-19896: Add typcodes 'q' and 'Q' to multiprocessing.sharedctypes. Patch by Antony Lee. * Add NEWS entry. * Slightly tweak NEWS entry Make it clear this is more of a fix rather than a new feature.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/multiprocessing/sharedctypes.py13
-rw-r--r--Lib/test/_test_multiprocessing.py17
2 files changed, 19 insertions, 11 deletions
diff --git a/Lib/multiprocessing/sharedctypes.py b/Lib/multiprocessing/sharedctypes.py
index 7228751..066cf8f 100644
--- a/Lib/multiprocessing/sharedctypes.py
+++ b/Lib/multiprocessing/sharedctypes.py
@@ -23,12 +23,13 @@ __all__ = ['RawValue', 'RawArray', 'Value', 'Array', 'copy', 'synchronized']
#
typecode_to_type = {
- 'c': ctypes.c_char, 'u': ctypes.c_wchar,
- 'b': ctypes.c_byte, 'B': ctypes.c_ubyte,
- 'h': ctypes.c_short, 'H': ctypes.c_ushort,
- 'i': ctypes.c_int, 'I': ctypes.c_uint,
- 'l': ctypes.c_long, 'L': ctypes.c_ulong,
- 'f': ctypes.c_float, 'd': ctypes.c_double
+ 'c': ctypes.c_char, 'u': ctypes.c_wchar,
+ 'b': ctypes.c_byte, 'B': ctypes.c_ubyte,
+ 'h': ctypes.c_short, 'H': ctypes.c_ushort,
+ 'i': ctypes.c_int, 'I': ctypes.c_uint,
+ 'l': ctypes.c_long, 'L': ctypes.c_ulong,
+ 'q': ctypes.c_longlong, 'Q': ctypes.c_ulonglong,
+ 'f': ctypes.c_float, 'd': ctypes.c_double
}
#
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index 0515730..9ef44a0 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -106,7 +106,7 @@ PRELOAD = ['__main__', 'test.test_multiprocessing_forkserver']
#
try:
- from ctypes import Structure, c_int, c_double
+ from ctypes import Structure, c_int, c_double, c_longlong
except ImportError:
Structure = object
c_int = c_double = None
@@ -1637,6 +1637,7 @@ class _TestValue(BaseTestCase):
('i', 4343, 24234),
('d', 3.625, -4.25),
('h', -232, 234),
+ ('q', 2 ** 33, 2 ** 34),
('c', latin('x'), latin('y'))
]
@@ -3179,7 +3180,8 @@ class _TestHeap(BaseTestCase):
class _Foo(Structure):
_fields_ = [
('x', c_int),
- ('y', c_double)
+ ('y', c_double),
+ ('z', c_longlong,)
]
class _TestSharedCTypes(BaseTestCase):
@@ -3191,9 +3193,10 @@ class _TestSharedCTypes(BaseTestCase):
self.skipTest("requires multiprocessing.sharedctypes")
@classmethod
- def _double(cls, x, y, foo, arr, string):
+ def _double(cls, x, y, z, foo, arr, string):
x.value *= 2
y.value *= 2
+ z.value *= 2
foo.x *= 2
foo.y *= 2
string.value *= 2
@@ -3203,18 +3206,20 @@ class _TestSharedCTypes(BaseTestCase):
def test_sharedctypes(self, lock=False):
x = Value('i', 7, lock=lock)
y = Value(c_double, 1.0/3.0, lock=lock)
+ z = Value(c_longlong, 2 ** 33, lock=lock)
foo = Value(_Foo, 3, 2, lock=lock)
arr = self.Array('d', list(range(10)), lock=lock)
string = self.Array('c', 20, lock=lock)
string.value = latin('hello')
- p = self.Process(target=self._double, args=(x, y, foo, arr, string))
+ p = self.Process(target=self._double, args=(x, y, z, foo, arr, string))
p.daemon = True
p.start()
p.join()
self.assertEqual(x.value, 14)
self.assertAlmostEqual(y.value, 2.0/3.0)
+ self.assertEqual(z.value, 2 ** 34)
self.assertEqual(foo.x, 6)
self.assertAlmostEqual(foo.y, 4.0)
for i in range(10):
@@ -3225,12 +3230,14 @@ class _TestSharedCTypes(BaseTestCase):
self.test_sharedctypes(lock=True)
def test_copy(self):
- foo = _Foo(2, 5.0)
+ foo = _Foo(2, 5.0, 2 ** 33)
bar = copy(foo)
foo.x = 0
foo.y = 0
+ foo.z = 0
self.assertEqual(bar.x, 2)
self.assertAlmostEqual(bar.y, 5.0)
+ self.assertEqual(bar.z, 2 ** 33)
#
#