summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_import/__init__.py28
-rw-r--r--Lib/test/test_import/data/package/__init__.py2
-rw-r--r--Lib/test/test_import/data/package/submodule.py0
3 files changed, 30 insertions, 0 deletions
diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py
index 4aca9e597c..3291d0896c 100644
--- a/Lib/test/test_import/__init__.py
+++ b/Lib/test/test_import/__init__.py
@@ -10,6 +10,8 @@ import py_compile
import random
import stat
import sys
+import threading
+import time
import unittest
import unittest.mock as mock
import textwrap
@@ -350,6 +352,32 @@ class ImportTests(unittest.TestCase):
with self.assertRaises(ImportError):
from test_from_import_AttributeError import does_not_exist
+ def test_concurrency(self):
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'data'))
+ try:
+ exc = None
+ def run():
+ event.wait()
+ try:
+ import package
+ except BaseException as e:
+ nonlocal exc
+ exc = e
+
+ for i in range(10):
+ event = threading.Event()
+ threads = [threading.Thread(target=run) for x in range(2)]
+ try:
+ with test.support.start_threads(threads, event.set):
+ time.sleep(0)
+ finally:
+ sys.modules.pop('package', None)
+ sys.modules.pop('package.submodule', None)
+ if exc is not None:
+ raise exc
+ finally:
+ del sys.path[0]
+
@skip_if_dont_write_bytecode
class FilePermissionTests(unittest.TestCase):
diff --git a/Lib/test/test_import/data/package/__init__.py b/Lib/test/test_import/data/package/__init__.py
new file mode 100644
index 0000000000..a4f2bc3400
--- /dev/null
+++ b/Lib/test/test_import/data/package/__init__.py
@@ -0,0 +1,2 @@
+import package.submodule
+package.submodule
diff --git a/Lib/test/test_import/data/package/submodule.py b/Lib/test/test_import/data/package/submodule.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/Lib/test/test_import/data/package/submodule.py