From 33d7c81bc4993a3f2932a4d67ea8f05429c7de2a Mon Sep 17 00:00:00 2001
From: Mashiro <57566630+HAOCHENYE@users.noreply.github.com>
Date: Tue, 30 Aug 2022 16:28:18 +0800
Subject: [PATCH] [Refactor]: Avoid creating instances with the same name
 (#483)

---
 mmengine/registry/default_scope.py        |  2 ++
 tests/test_registry/test_default_scope.py | 13 +++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/mmengine/registry/default_scope.py b/mmengine/registry/default_scope.py
index 6e7b32f6..cc27f8ee 100644
--- a/mmengine/registry/default_scope.py
+++ b/mmengine/registry/default_scope.py
@@ -86,6 +86,8 @@ class DefaultScope(ManagerMixin):
             yield
         else:
             tmp = copy.deepcopy(cls._instance_dict)
+            # To avoid create an instance with the same name.
+            time.sleep(1e-6)
             cls.get_instance(f'overwrite-{time.time()}', scope_name=scope_name)
             try:
                 yield
diff --git a/tests/test_registry/test_default_scope.py b/tests/test_registry/test_default_scope.py
index 3846b15a..0798f4a2 100644
--- a/tests/test_registry/test_default_scope.py
+++ b/tests/test_registry/test_default_scope.py
@@ -33,3 +33,16 @@ class TestDefaultScope:
             ).scope_name == 'test_overwrite'
         assert DefaultScope.get_current_instance(
         ).scope_name == origin_scope.scope_name == 'origin_scope'
+
+        # Test overwrite default scope immediately.
+        # Test sequentially overwrite.
+        with DefaultScope.overwrite_default_scope(scope_name='test_overwrite'):
+            pass
+        with DefaultScope.overwrite_default_scope(scope_name='test_overwrite'):
+            pass
+
+        # Test nested overwrite.
+        with DefaultScope.overwrite_default_scope(scope_name='test_overwrite'):
+            with DefaultScope.overwrite_default_scope(
+                    scope_name='test_overwrite'):
+                pass
-- 
GitLab