文章目录
如何动态加载?启动一个单独的进程导入so文件。
最近在进行python和C++的混合开发,功能由C++实现,再将C++编译为so文件在jupyter noteboook中进行展示。在jupyter notebookz中涉及到”加载数据”和“加载so文件”。由于so文件改动较频繁,因此整个nb(notebook)经常重跑(终止python进程再重新跑)。但是在nb重跑的时候,数据也会重新加载,这部分耗时较久,成为了开发速度的瓶颈。
为了缩短程序重跑的时间,一个直观的想法是缩短程序数据加载时间。经过分析之后,发现数据加载耗时几乎无法减少。
因此决定采取的方案是重新导入so文件。但是经过查找发现
Python’s import mechanism will never dlclose() a shared library. Once loaded, the library will stay until the process terminates.
链接 a shared library. Once loaded, the library will stay until the process terminates.)
因此在nb的进程中重新导入so文件,几乎无可能。
所以决定绕过在nb中导入so文件,转而该为在nb中启动一个子进程,负责导入so文件、进行有关运算和返回结果。由于每次调用时都会启动一个全新的进程,它能够去导入磁盘最新的so文件,这样就可以在so文件改动之后,在不中断nb的情况下体现so文件的改动。
More Options
- code不单独拎出去,全部卸载nb中
- 这是可行的,process以spawn启动就行
- 自定义python中Import机制
- 参考
importlib
- 参考