From 95eb2181122724bd4ebaca9fd7f5d6e22c47e0b2 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Thu, 11 Nov 2021 20:42:49 +0800 Subject: [PATCH] import_cache: read files only once --- artiq/language/import_cache.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/artiq/language/import_cache.py b/artiq/language/import_cache.py index 08de378c4..8ccc8d6ba 100644 --- a/artiq/language/import_cache.py +++ b/artiq/language/import_cache.py @@ -24,16 +24,17 @@ linecache_getlines = None def add_module_to_cache(module): if hasattr(module, "__file__"): fn = module.__file__ - try: - with tokenize.open(fn) as fp: - lines = fp.readlines() - if lines and not lines[-1].endswith("\n"): - lines[-1] += "\n" - cache[fn] = lines - except: - logger.warning("failed to add '%s' to cache", fn, exc_info=True) - else: - logger.debug("added '%s' to cache", fn) + if fn not in cache: + try: + with tokenize.open(fn) as fp: + lines = fp.readlines() + if lines and not lines[-1].endswith("\n"): + lines[-1] += "\n" + cache[fn] = lines + except: + logger.warning("failed to add '%s' to cache", fn, exc_info=True) + else: + logger.debug("added '%s' to cache", fn) def hook_getlines(filename, module_globals=None):