Jupyternotebook 动态加载So/dll文件

文章目录

如何动态加载?启动一个单独的进程导入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

  1. code不单独拎出去,全部卸载nb中
    1. 这是可行的,process以spawn启动就行
  2. 自定义python中Import机制
    1. 参考importlib