小编Han*_*rst的帖子

Python多重处理释放共享数组使用的内存

有没有办法释放共享多处理数组使用的内存?下面的代码片段创建了大约 1 GiB 共享内存的内存块,然后该内存块被阻止用于脚本的其余部分。有没有办法在同一脚本运行期间释放该内存?

我尝试删除所有引用并通过 gc.collect() 调用垃圾收集器,但这似乎对运行时脚本的内存使用没有任何影响。

import psutil
import gc
import ctypes as cty
import multiprocessing as mpc
import os

def bytes_to_GiB_MiB(n_bytes):
    return n_bytes/2**30, (n_bytes%(2**30))/2**20
    
def print_mem_usage():
    process = psutil.Process(os.getpid()) 
    print "Script Mem Usage {:} GiB {:} MiB".format(*bytes_to_GiB_MiB(process.memory_info().rss))
    return process.memory_info().rss    
    
if __name__=="__main__":
    t_N = 5000
    N=150
    Shape_spl = (t_N+4, N,N) 
    mem0 = print_mem_usage()
    C_shared = mpc.Array(cty.c_double, N*N*(t_N+4))
    mem1 = print_mem_usage()
    print "Mem Difference is {:} GiB {:} MiB".format(*bytes_to_GiB_MiB(mem1-mem0))
    del C_shared
    gc.collect()
    # Do something here such that the memory …
Run Code Online (Sandbox Code Playgroud)

python shared-memory multiprocessing

5
推荐指数
1
解决办法
532
查看次数

如何使用模块作为包的一部分和直接可执行的脚本?

假设我有一个名为 的包文件夹my_package。该目录包含一个名为 的文件__init__.py和一个my_module.py在其他模块文件中被称为的模块文件。该模块my_module.py包含功能do_something_with_file(file_path)

该函数在包的其他部分中使用,但如果可以将其作为命令行脚本调用,将文件路径作为第一个位置参数并执行该函数,那么它将很实用。我的第一个天真的方法是通过以下方式实现:

if __name__ == "__main__":
    import sys
    do_something_with_file(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)

在文件中my_module.py

但这需要作为my_module.pymain 执行。但作为包的一部分,它使用相对导入,仅当模块作为包的一部分执行时才有效,但如果直接执行脚本则失败,这使得这种方法没有吸引力。看来该文件中的主块不是获得所需功能的正确方法。

将功能公开为简单脚本的良好做法是什么?

我没有使用 python 打包的经验,我通常通过执行直接使用脚本python my_script.py,但我想更好地了解包并通过包公开功能。

python python-import python-3.x python-packaging

3
推荐指数
1
解决办法
1440
查看次数