[Python-checkins] test_multiprocessing: Fix dangling process/thread (#2850)

Victor Stinner webhook-mailer at python.org
Mon Jul 24 18:33:59 EDT 2017


https://github.com/python/cpython/commit/d7e64d9934d86aa6173229de5af5fe908662a33a
commit: d7e64d9934d86aa6173229de5af5fe908662a33a
branch: master
author: Victor Stinner <victor.stinner at gmail.com>
committer: GitHub <noreply at github.com>
date: 2017年07月25日T00:33:56+02:00
summary:
test_multiprocessing: Fix dangling process/thread (#2850)
bpo-26762: Fix more dangling processes and threads in
test_multiprocessing:
* Queue: call close() followed by join_thread()
* Process: call join() or self.addCleanup(p.join)
files:
M Lib/test/_test_multiprocessing.py
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index 88e2eb3dac1..126725f44bd 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -32,11 +32,12 @@
 # without thread support.
 import threading
 
-import multiprocessing.dummy
 import multiprocessing.connection
-import multiprocessing.managers
+import multiprocessing.dummy
 import multiprocessing.heap
+import multiprocessing.managers
 import multiprocessing.pool
+import multiprocessing.queues
 
 from multiprocessing import util
 
@@ -64,6 +65,13 @@
 def latin(s):
 return s.encode('latin')
 
+
+def close_queue(queue):
+ if isinstance(queue, multiprocessing.queues.Queue):
+ queue.close()
+ queue.join_thread()
+
+
 #
 # Constants
 #
@@ -825,6 +833,7 @@ def test_qsize(self):
 self.assertEqual(q.qsize(), 1)
 q.get()
 self.assertEqual(q.qsize(), 0)
+ close_queue(q)
 
 @classmethod
 def _test_task_done(cls, q):
@@ -897,6 +906,7 @@ def __reduce__(self):
 q.put(True)
 # bpo-30595: use a timeout of 1 second for slow buildbots
 self.assertTrue(q.get(timeout=1.0))
+ close_queue(q)
 
 #
 #
@@ -1020,10 +1030,12 @@ def test_notify(self):
 p = self.Process(target=self.f, args=(cond, sleeping, woken))
 p.daemon = True
 p.start()
+ self.addCleanup(p.join)
 
 p = threading.Thread(target=self.f, args=(cond, sleeping, woken))
 p.daemon = True
 p.start()
+ self.addCleanup(p.join)
 
 # wait for both children to start sleeping
 sleeping.acquire()
@@ -1066,11 +1078,13 @@ def test_notify_all(self):
 args=(cond, sleeping, woken, TIMEOUT1))
 p.daemon = True
 p.start()
+ self.addCleanup(p.join)
 
 t = threading.Thread(target=self.f,
 args=(cond, sleeping, woken, TIMEOUT1))
 t.daemon = True
 t.start()
+ self.addCleanup(t.join)
 
 # wait for them all to sleep
 for i in range(6):
@@ -1089,10 +1103,12 @@ def test_notify_all(self):
 p = self.Process(target=self.f, args=(cond, sleeping, woken))
 p.daemon = True
 p.start()
+ self.addCleanup(p.join)
 
 t = threading.Thread(target=self.f, args=(cond, sleeping, woken))
 t.daemon = True
 t.start()
+ self.addCleanup(t.join)
 
 # wait for them to all sleep
 for i in range(6):
@@ -1123,10 +1139,12 @@ def test_notify_n(self):
 p = self.Process(target=self.f, args=(cond, sleeping, woken))
 p.daemon = True
 p.start()
+ self.addCleanup(p.join)
 
 t = threading.Thread(target=self.f, args=(cond, sleeping, woken))
 t.daemon = True
 t.start()
+ self.addCleanup(t.join)
 
 # wait for them to all sleep
 for i in range(6):
@@ -1309,6 +1327,7 @@ def test_event(self):
 p.daemon = True
 p.start()
 self.assertEqual(wait(), True)
+ p.join()
 
 #
 # Tests for Barrier - adapted from tests in test/lock_tests.py
@@ -1654,6 +1673,7 @@ def test_thousand(self):
 p = self.Process(target=self._test_thousand_f,
 args=(self.barrier, passes, child_conn, lock))
 p.start()
+ self.addCleanup(p.join)
 
 for i in range(passes):
 for j in range(self.N):


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /