Visual Studio 2015 - Http не существует в пространстве имен System.Runtime.Remoting.Channels.Http;

Следующий код, расширенный с помощью time.sleep(10), не вызывает ошибку утверждения (безопасный порог составляет одну секунду). Это дает объяснение, почему перезагрузка не работает должным образом. Таким образом, ответ на вопрос, почему возникает ошибка утверждения, это

importlib.reload() использует временную метку файла, чтобы решить о повторной компиляции кэшированного файла.

Если обновление / изменение кода происходит очень быстро, кешированный и файл сценария считаются одной и той же версией, и не происходит повторной компиляции кэшированных файлов, из которых модули повторно загружаются.

import os
import sys
import tempfile
import importlib
import time

# Create some module and import it
dir = tempfile.TemporaryDirectory()
os.mkdir(os.path.join(dir.name, 'test_package'))
with open(os.path.join(dir.name, '__init__.py'), "w") as f:
    f.write("\n")
with open(os.path.join(dir.name, 'test_package', 'some_module.py'), "w") as f:
    f.write("def a():\n    print(\"old\")\n    return 0\n")
sys.path.insert(0, dir.name)

from test_package import some_module

# Check that imported code works as expected
assert some_module.a() == 0
time.sleep(10)
# Alter module and reload
with open(os.path.join(dir.name, 'test_package', 'some_module.py'), "w") as f:
    f.write("def a():\n    print(\"new\")\n    return 1\n")

importlib.reload(some_module)

# Check wether modifications have been reloaded
assert some_module.a() == 1

sys.path.pop(0)
0
задан aDoN 20 March 2019 в 15:27
поделиться