Merged revisions 85444 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85444 | antoine.pitrou | 2010-10-14 01:48:39 +0200 (jeu., 14 oct. 2010) | 6 lines

  Fix (hopefully) occasional failures in test_threaded_import.
  `done` could be released multiple times because of concurrent
  execution.  We convert it to an Event, where calling set()
  multiple times is not a problem.
........
This commit is contained in:
Antoine Pitrou 2010-10-13 23:50:54 +00:00
parent 2693d08794
commit 35ce42f20d
1 changed files with 4 additions and 5 deletions

View File

@ -33,7 +33,7 @@ def task(N, done, done_tasks, errors):
done_tasks.append(thread.get_ident())
finished = len(done_tasks) == N
if finished:
done.release()
done.set()
# Create a circular import structure: A -> C -> B -> D -> A
# NOTE: `time` is already loaded and therefore doesn't threaten to deadlock.
@ -99,8 +99,7 @@ class ThreadedImportTests(unittest.TestCase):
# This triggers on, e.g., from test import autotest.
raise unittest.SkipTest("can't run when import lock is held")
done = thread.allocate_lock()
done.acquire()
done = threading.Event()
for N in (20, 50) * 3:
if verbose:
print("Trying", N, "threads ...", end=' ')
@ -112,13 +111,13 @@ class ThreadedImportTests(unittest.TestCase):
pass
errors = []
done_tasks = []
done.clear()
for i in range(N):
thread.start_new_thread(task, (N, done, done_tasks, errors,))
done.acquire()
done.wait(60)
self.assertFalse(errors)
if verbose:
print("OK.")
done.release()
def test_parallel_module_init(self):
self.check_parallel_module_init()