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