diff options
| author | Antoine Pitrou <solipsis@pitrou.net> | 2010-11-02 23:51:30 (GMT) | 
|---|---|---|
| committer | Antoine Pitrou <solipsis@pitrou.net> | 2010-11-02 23:51:30 (GMT) | 
| commit | 4eb2b28553eceda5a19465534bc906929dd85243 (patch) | |
| tree | e8c46b1416a4155b3d2852ad689f9fac901a828d /Lib/test/test_multiprocessing.py | |
| parent | fa6582752a19f38f8c666d36122c7fc450c2dcf5 (diff) | |
| download | cpython-4eb2b28553eceda5a19465534bc906929dd85243.zip cpython-4eb2b28553eceda5a19465534bc906929dd85243.tar.gz cpython-4eb2b28553eceda5a19465534bc906929dd85243.tar.bz2  | |
Merged revisions 86130 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
  r86130 | antoine.pitrou | 2010-11-03 00:50:11 +0100 (mer., 03 nov. 2010) | 3 lines
  Issue #10173: test_multiprocessing shouldn't pickle TestCase instances
........
Diffstat (limited to 'Lib/test/test_multiprocessing.py')
| -rw-r--r-- | Lib/test/test_multiprocessing.py | 73 | 
1 files changed, 49 insertions, 24 deletions
diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index ac02d5a..f5873da 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -115,6 +115,13 @@ class BaseTestCase(object):          else:              return self.assertEqual(value, res) +    # For the sanity of Windows users, rather than crashing or freezing in +    # multiple ways. +    def __reduce__(self, *args): +        raise NotImplementedError("shouldn't try to pickle a test case") + +    __reduce_ex__ = __reduce__ +  #  # Return the value of a semaphore  # @@ -153,12 +160,13 @@ class _TestProcess(BaseTestCase):          self.assertEqual(current.ident, os.getpid())          self.assertEqual(current.exitcode, None) -    def _test(self, q, *args, **kwds): -        current = self.current_process() +    @classmethod +    def _test(cls, q, *args, **kwds): +        current = cls.current_process()          q.put(args)          q.put(kwds)          q.put(current.name) -        if self.TYPE != 'threads': +        if cls.TYPE != 'threads':              q.put(bytes(current.authkey))              q.put(current.pid) @@ -201,7 +209,8 @@ class _TestProcess(BaseTestCase):          self.assertEquals(p.is_alive(), False)          self.assertNotIn(p, self.active_children()) -    def _test_terminate(self): +    @classmethod +    def _test_terminate(cls):          time.sleep(1000)      def test_terminate(self): @@ -250,13 +259,14 @@ class _TestProcess(BaseTestCase):          p.join()          self.assertNotIn(p, self.active_children()) -    def _test_recursion(self, wconn, id): +    @classmethod +    def _test_recursion(cls, wconn, id):          from multiprocessing import forking          wconn.send(id)          if len(id) < 2:              for i in range(2): -                p = self.Process( -                    target=self._test_recursion, args=(wconn, id+[i]) +                p = cls.Process( +                    target=cls._test_recursion, args=(wconn, id+[i])                      )                  p.start()                  p.join() @@ -339,7 +349,8 @@ def queue_full(q, maxsize):  class _TestQueue(BaseTestCase): -    def _test_put(self, queue, child_can_start, parent_can_continue): +    @classmethod +    def _test_put(cls, queue, child_can_start, parent_can_continue):          child_can_start.wait()          for i in range(6):              queue.get() @@ -403,7 +414,8 @@ class _TestQueue(BaseTestCase):          proc.join() -    def _test_get(self, queue, child_can_start, parent_can_continue): +    @classmethod +    def _test_get(cls, queue, child_can_start, parent_can_continue):          child_can_start.wait()          #queue.put(1)          queue.put(2) @@ -464,7 +476,8 @@ class _TestQueue(BaseTestCase):          proc.join() -    def _test_fork(self, queue): +    @classmethod +    def _test_fork(cls, queue):          for i in range(10, 20):              queue.put(i)          # note that at this point the items may only be buffered, so the @@ -512,7 +525,8 @@ class _TestQueue(BaseTestCase):          q.get()          self.assertEqual(q.qsize(), 0) -    def _test_task_done(self, q): +    @classmethod +    def _test_task_done(cls, q):          for obj in iter(q.get, None):              time.sleep(DELTA)              q.task_done() @@ -624,7 +638,8 @@ class _TestSemaphore(BaseTestCase):  class _TestCondition(BaseTestCase): -    def f(self, cond, sleeping, woken, timeout=None): +    @classmethod +    def f(cls, cond, sleeping, woken, timeout=None):          cond.acquire()          sleeping.release()          cond.wait(timeout) @@ -756,7 +771,8 @@ class _TestCondition(BaseTestCase):  class _TestEvent(BaseTestCase): -    def _test_event(self, event): +    @classmethod +    def _test_event(cls, event):          time.sleep(TIMEOUT2)          event.set() @@ -809,8 +825,9 @@ class _TestValue(BaseTestCase):          ('c', latin('x'), latin('y'))          ] -    def _test(self, values): -        for sv, cv in zip(values, self.codes_values): +    @classmethod +    def _test(cls, values): +        for sv, cv in zip(values, cls.codes_values):              sv.value = cv[2] @@ -865,7 +882,8 @@ class _TestArray(BaseTestCase):      ALLOWED_TYPES = ('processes',) -    def f(self, seq): +    @classmethod +    def f(cls, seq):          for i in range(1, len(seq)):              seq[i] += seq[i-1] @@ -1210,7 +1228,8 @@ class _TestRemoteManager(BaseTestCase):      ALLOWED_TYPES = ('manager',) -    def _putter(self, address, authkey): +    @classmethod +    def _putter(cls, address, authkey):          manager = QueueManager2(              address=address, authkey=authkey, serializer=SERIALIZER              ) @@ -1248,7 +1267,8 @@ class _TestRemoteManager(BaseTestCase):  class _TestManagerRestart(BaseTestCase): -    def _putter(self, address, authkey): +    @classmethod +    def _putter(cls, address, authkey):          manager = QueueManager(              address=address, authkey=authkey, serializer=SERIALIZER)          manager.connect() @@ -1287,7 +1307,8 @@ class _TestConnection(BaseTestCase):      ALLOWED_TYPES = ('processes', 'threads') -    def _echo(self, conn): +    @classmethod +    def _echo(cls, conn):          for msg in iter(conn.recv_bytes, SENTINEL):              conn.send_bytes(msg)          conn.close() @@ -1436,8 +1457,9 @@ class _TestListenerClient(BaseTestCase):      ALLOWED_TYPES = ('processes', 'threads') -    def _test(self, address): -        conn = self.connection.Client(address) +    @classmethod +    def _test(cls, address): +        conn = cls.connection.Client(address)          conn.send('hello')          conn.close() @@ -1598,7 +1620,8 @@ class _TestSharedCTypes(BaseTestCase):      ALLOWED_TYPES = ('processes',) -    def _double(self, x, y, foo, arr, string): +    @classmethod +    def _double(cls, x, y, foo, arr, string):          x.value *= 2          y.value *= 2          foo.x *= 2 @@ -1646,7 +1669,8 @@ class _TestFinalize(BaseTestCase):      ALLOWED_TYPES = ('processes',) -    def _test_finalize(self, conn): +    @classmethod +    def _test_finalize(cls, conn):          class Foo(object):              pass @@ -1740,7 +1764,8 @@ class _TestLogging(BaseTestCase):          logger.info('nor will this')          logger.setLevel(LOG_LEVEL) -    def _test_level(self, conn): +    @classmethod +    def _test_level(cls, conn):          logger = multiprocessing.get_logger()          conn.send(logger.getEffectiveLevel())  | 
