gpt4 book ai didi

python - 如何在 linux 上运行单个 python 脚本的最佳实例数

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:19 25 4
gpt4 key购买 nike

我有一个脚本对大约 1200 个不同的文件执行独立任务。它遍历每个文件并检查它是否已经完成或正在进行,如果它还没有完成并且没有被积极地处理(如果它没有并行运行就不会)然后它使用文件执行任务。这遵循以下大纲:

myScript.py:

for file in directory:
fileStatus = getFileStatus(file)
if fileStatus != 'Complete' and fileStatus != 'inProgress':
setFileStatus(file, 'inProgress')
doTask(file)
setFileStatus(file, 'Complete')

doTask() 在我的机器上需要 20-40 分钟,并且会从开始时的最低 RAM 要求到中间的大约 8GB,然后在最后退回到最低要求。根据文件的不同,这将在可变的时间内发生。

我想与自身并行运行此脚本,以便在尽可能短的时间内完成所有任务,并使用我机器的最大资源量。假设(在无知中)限制资源是 RAM(我的机器有 64GB),并且脚本都将同时消耗 RAM,我可以模仿对 this question 的响应。以这样的方式:

python myScript.py & 
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &

但是,我想我可以根据每个流程在其执行过程中的位置来适应更多。

有没有办法动态确定我有多少资源可用,并相应地创建、销毁或暂停此脚本的实例,以便机器在时间上以最大效率工作?我想避免对 myScript 进行更改,而是从另一个将处理创建、销毁和暂停的脚本中调用它。

最佳答案

GNU Parallel 专为执行以下操作而构建:

python myScript.py & 
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &
python myScript.py &

它还有一些功能可以做资源限制。然而,鉴于以下情况,要找到最佳数量真的很难:

  • 每个作业运行 20-40 分钟(如果这个问题得到解决,会更容易)
  • 有一个像山一样的 RAM 使用包络(如果它在整个运行过程中保持在同一水平,会更容易)

如果 64 GB RAM 是限制资源,那么运行 8 个作业总是安全的:

cat filelist | parallel -j8 python myScript.py

如果您有足够的 CPU 能力并且愿意冒浪费一些的风险,那么如果有 8 GB 空闲内存并且如果最后一个作业是在 3 分钟前开始的(假设作业达到峰值),您可以运行开始作业3-5 分钟内的内存使用情况)。如果可用内存低于 4 GB,GNU Parallel 将杀死最新的作业并将其放回队列中:

cat filelist | parallel -j0 --memlimit 8G --delay 300 python myScript.py

关于python - 如何在 linux 上运行单个 python 脚本的最佳实例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48937669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com