From 5cc043f01521ccfa7801c8a9a132d0c9811e94bc Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Tue, 13 Oct 2020 14:48:22 +0800 Subject: [PATCH] fix(imperative): sync command queue at exit GitOrigin-RevId: c0d6aad27535b5a42d22124fc8c4662b02707a7c --- imperative/python/megengine/__init__.py | 5 +++++ imperative/python/test/conftest.py | 8 ++++++++ imperative/src/impl/interpreter_impl.cpp | 4 +++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/imperative/python/megengine/__init__.py b/imperative/python/megengine/__init__.py index 083032fd..9a7cfc70 100644 --- a/imperative/python/megengine/__init__.py +++ b/imperative/python/megengine/__init__.py @@ -10,6 +10,7 @@ import os import sys import platform import ctypes +import atexit if sys.platform == "win32": lib_path = os.path.join(os.path.dirname(__file__), "core/lib") @@ -71,6 +72,7 @@ if sys.platform == "win32": kernel32.SetErrorMode(old_error_mode) from .core._imperative_rt.utils import _set_fork_exec_path_for_timed_func +from .core._imperative_rt.imperative import sync from .device import * from .logger import enable_debug_log, get_logger, set_log_file, set_log_level from .serialization import load, save @@ -83,4 +85,7 @@ _set_fork_exec_path_for_timed_func( os.path.join(os.path.dirname(__file__), "utils", "_timed_func_fork_exec_entry.py"), ) +atexit.register(sync) + +del sync del _set_fork_exec_path_for_timed_func diff --git a/imperative/python/test/conftest.py b/imperative/python/test/conftest.py index f0de9679..180908ff 100644 --- a/imperative/python/test/conftest.py +++ b/imperative/python/test/conftest.py @@ -1,4 +1,12 @@ import os import sys +import pytest + +from megengine.core._imperative_rt.imperative import sync + sys.path.append(os.path.join(os.path.dirname(__file__), "helpers")) + + +def pytest_runtest_teardown(): + sync() diff --git a/imperative/src/impl/interpreter_impl.cpp b/imperative/src/impl/interpreter_impl.cpp index 748c3dcd..79800ed2 100644 --- a/imperative/src/impl/interpreter_impl.cpp +++ b/imperative/src/impl/interpreter_impl.cpp @@ -175,7 +175,9 @@ void ChannelImpl::free(TensorInfo* ptr) { m_pool.free(ptr); } -ChannelImpl::~ChannelImpl() {} +ChannelImpl::~ChannelImpl() { + close(); +} void ChannelImpl::produce_tensor(TensorInfo* dest, TensorPtr ptr) { MGB_LOCK_GUARD(m_mutex);