我有一个python脚本,它有很高的运行时间(在单个虚拟核心机上测试单个脚本时需要4天),它可以根据我们提供的输入参数处理一些文件列表。
我想测试的论点列表很长,由于基础设施的高成本,按顺序运行每个论点是不可行的。
因此,我尝试在我的12核机器上使用不同的参数独立运行脚本,例如
nohup python script.py 1 &
nohup python script.py 2 &
还有8次。。考虑到每个进程将独立分配给每个核心,2个核心将处于备用状态,因为脚本工作的文件中没有重叠,任何竞争条件或死锁都不会发生,因为我们传递给所有脚本的参数是不同的,因此GIL没有问题。
我观察到的是,单个python脚本的运行速度不相似,也没有遵循之前提到的时间线,所有十个不同的进程都应该在4天内完成,但大约是14天,但只有一些线程完成了,而且也是在最近1-2天内完成的。其余的进程都落后了,我可以从生成的日志文件中看到这一点。
有人能帮我理解蟒蛇的这种行为吗??
我建议首先尝试描述和理解更多关于程序及其性能的信息:
您可以从Python行分析器开始,它用于查看脚本中每行代码的运行速度和频率。
pip install line_profiler
一旦你计时,你就可以开始分析内存
pip install -U memory_profiler
pip install psutil
找到"内存泄漏"的最快方法是使用一个名为objgraph的很棒的工具。这个工具可以让你查看内存中对象的数量,还可以定位代码中所有引用这些对象的不同位置。
pip install objgraph
一旦你理解了脚本的每一部分,你能描述更多关于你的代码的性质吗?此外,请阅读上一篇文章的摘录:
">为了利用多核(或多处理器)计算机,您需要一个可以并行运行的程序,以及一个允许程序在多核(和操作系统,尽管您可以在PC上运行的任何操作系统都会这样做)上并行执行的运行时。这实际上是并行编程,尽管并行编程有不同的方法。与Python相关的是多处理和多线程">
python支持多处理器/多核编程吗?