在Python中加载两个动态库实例
我有一个用Fortran编写的程序,并作为动态库编译(使用-fPIC)。我用Python中的CDLL加载以执行一些数值计算。该库使用内部持久内存(在模块中)保存中间值。我在Windows和Linux上工作(分别使用.dll和.so)。动态库打包在Python模块中,并安装在lib子目录中 如果我在同一台计算机上运行两个加载动态库的不同Python脚本,它们会获得单独的内存还是访问同一个内存(从而破坏结果) 如果我:在Python中加载两个动态库实例,python,ctypes,python-multiprocessing,python-multithreading,Python,Ctypes,Python Multiprocessing,Python Multithreading,我有一个用Fortran编写的程序,并作为动态库编译(使用-fPIC)。我用Python中的CDLL加载以执行一些数值计算。该库使用内部持久内存(在模块中)保存中间值。我在Windows和Linux上工作(分别使用.dll和.so)。动态库打包在Python模块中,并安装在lib子目录中 如果我在同一台计算机上运行两个加载动态库的不同Python脚本,它们会获得单独的内存还是访问同一个内存(从而破坏结果) 如果我: 将它们加载到不同的多处理实例中 将它们加载到不同的多线程实例中 将它们加载到两
- 将它们加载到不同的多处理实例中
- 将它们加载到不同的多线程实例中
- 将它们加载到两个不同内核的Jupyter笔记本电脑中
- 在不同的Python虚拟环境中运行它们
- 同一个库只能加载一次;更准确地说,只要您尝试以相同的路径加载库,它在加载过程中只加载一次
- 现在假设加载一个库,将该库复制/粘贴到其他位置,重命名它并尝试加载副本,然后加载两次
- 对于同一个库多次加载所使用的内存,由于只加载了一个库,因此没有损坏。如果您加载它的一个副本,那么每个库都会获得自己的内存分配
- 如果是同一个解释器运行两个笔记本,那么解释器只加载了库的一个实例
- 不同的解释器:两个进程->两个库,每个库都有自己的分离状态
不同的虚拟环境使用不同的流程。太棒了,正是我想要的!节省了我几个小时的测试!