在REPL中后台导入Python模块

5

一些Python模块,特别是matplotlib,加载时间很长。

start = datetime.datetime.now(); import numpy, pandas, matplotlib, sklearn; datetime.datetime.now() - start

当使用缓存文件时,加载需要半秒钟左右,而非缓存文件则需要几秒钟时间。有没有一种方法在Python解释器中将这些模块后台加载


我的五年半的Macbook Pro上花了0:00:00.645208。这会影响你的工作流程吗? - Ryan
@RyanSandridge:如果它发生了100次,对我来说就是相似的价值。更重要的是:如果文件没有被缓存,可能需要几秒钟才能完成。所以,要么输入并使下一个>>>提示可用,要么感到有点无聊,等待,也许切换任务... - serv-inc
1个回答

7
你可以在单独的线程中导入模块。以下是解决方案。
创建一个名为load_modules.py的文件:
from concurrent.futures import ThreadPoolExecutor
import importlib
import sys

modules_to_load = ['numpy', 'pandas', 'matplotlib']


def do_import(module_name):
    thismodule = sys.modules[__name__]

    module = importlib.import_module(module_name)
    setattr(thismodule, module_name, module)
    print(module_name, 'imported')


executor = ThreadPoolExecutor()
for module_name in modules_to_load:
    executor.submit(do_import, module_name)

然后您可以通过命令启动解释器:

python -ic "exec(open(\"load_modules.py\").read(), globals())"

或者只需运行

exec(open("load_modules.py").read(), globals())

在您的解释器中加载模块。


1
谢谢。这个怎么能够作为一个函数 bg_load(module_name) 实现呢? - serv-inc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接