[Python-checkins] r68711 - in python/branches/release26-maint: Doc/library/multiprocessing.rst Lib/multiprocessing/sharedctypes.py Lib/test/test_multiprocessing.py
benjamin.peterson
python-checkins at python.org
Sun Jan 18 05:01:28 CET 2009
Author: benjamin.peterson
Date: Sun Jan 18 05:01:18 2009
New Revision: 68711
Log:
Merged revisions 68708 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r68708 | jesse.noller | 2009年01月17日 20:45:38 -0600 (2009年1月17日) | 1 line
Resolve issue 4449: AssertionError in mp_benchmarks.py
........
Modified:
python/branches/release26-maint/ (props changed)
python/branches/release26-maint/Doc/library/multiprocessing.rst
python/branches/release26-maint/Lib/multiprocessing/sharedctypes.py
python/branches/release26-maint/Lib/test/test_multiprocessing.py
Modified: python/branches/release26-maint/Doc/library/multiprocessing.rst
==============================================================================
--- python/branches/release26-maint/Doc/library/multiprocessing.rst (original)
+++ python/branches/release26-maint/Doc/library/multiprocessing.rst Sun Jan 18 05:01:18 2009
@@ -880,7 +880,7 @@
It is possible to create shared objects using shared memory which can be
inherited by child processes.
-.. function:: Value(typecode_or_type[, *args, lock]])
+.. function:: Value(typecode_or_type, *args[, lock])
Return a :mod:`ctypes` object allocated from shared memory. By default the
return value is actually a synchronized wrapper for the object.
@@ -962,7 +962,7 @@
*typecode_or_type* determines the type of the returned object: it is either a
ctypes type or a one character typecode of the kind used by the :mod:`array`
- module. */*args* is passed on to the constructor for the type.
+ module. *\*args* is passed on to the constructor for the type.
Note that setting and getting the value is potentially non-atomic -- use
:func:`Value` instead to make sure that access is automatically synchronized
@@ -972,7 +972,7 @@
attributes which allow one to use it to store and retrieve strings -- see
documentation for :mod:`ctypes`.
-.. function:: Array(typecode_or_type, size_or_initializer[, *args[, lock]])
+.. function:: Array(typecode_or_type, size_or_initializer, *args[, lock])
The same as :func:`RawArray` except that depending on the value of *lock* a
process-safe synchronization wrapper may be returned instead of a raw ctypes
Modified: python/branches/release26-maint/Lib/multiprocessing/sharedctypes.py
==============================================================================
--- python/branches/release26-maint/Lib/multiprocessing/sharedctypes.py (original)
+++ python/branches/release26-maint/Lib/multiprocessing/sharedctypes.py Sun Jan 18 05:01:18 2009
@@ -69,9 +69,12 @@
if kwds:
raise ValueError('unrecognized keyword argument(s): %s' % kwds.keys())
obj = RawValue(typecode_or_type, *args)
- if lock is None:
+ if lock is False:
+ return obj
+ if lock in (True, None):
lock = RLock()
- assert hasattr(lock, 'acquire')
+ if not hasattr(lock, 'acquire'):
+ raise AttributeError("'%r' has no method 'acquire'" % lock)
return synchronized(obj, lock)
def Array(typecode_or_type, size_or_initializer, **kwds):
@@ -82,9 +85,12 @@
if kwds:
raise ValueError('unrecognized keyword argument(s): %s' % kwds.keys())
obj = RawArray(typecode_or_type, size_or_initializer)
- if lock is None:
+ if lock is False:
+ return obj
+ if lock in (True, None):
lock = RLock()
- assert hasattr(lock, 'acquire')
+ if not hasattr(lock, 'acquire'):
+ raise AttributeError("'%r' has no method 'acquire'" % lock)
return synchronized(obj, lock)
def copy(obj):
Modified: python/branches/release26-maint/Lib/test/test_multiprocessing.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_multiprocessing.py (original)
+++ python/branches/release26-maint/Lib/test/test_multiprocessing.py Sun Jan 18 05:01:18 2009
@@ -829,10 +829,16 @@
obj3 = val3.get_obj()
self.assertEqual(lock, lock3)
- arr4 = self.RawValue('i', 5)
+ arr4 = self.Value('i', 5, lock=False)
self.assertFalse(hasattr(arr4, 'get_lock'))
self.assertFalse(hasattr(arr4, 'get_obj'))
+ self.assertRaises(AttributeError, self.Value, 'i', 5, lock='navalue')
+
+ arr5 = self.RawValue('i', 5)
+ self.assertFalse(hasattr(arr5, 'get_lock'))
+ self.assertFalse(hasattr(arr5, 'get_obj'))
+
class _TestArray(BaseTestCase):
@@ -887,9 +893,15 @@
obj3 = arr3.get_obj()
self.assertEqual(lock, lock3)
- arr4 = self.RawArray('i', range(10))
+ arr4 = self.Array('i', range(10), lock=False)
self.assertFalse(hasattr(arr4, 'get_lock'))
self.assertFalse(hasattr(arr4, 'get_obj'))
+ self.assertRaises(AttributeError,
+ self.Array, 'i', range(10), lock='notalock')
+
+ arr5 = self.RawArray('i', range(10))
+ self.assertFalse(hasattr(arr5, 'get_lock'))
+ self.assertFalse(hasattr(arr5, 'get_obj'))
#
#
More information about the Python-checkins
mailing list