我正在使用python脚本在我的图像中执行一些计算,并将获得的数组保存到.png文件中。我处理3000到4000张图像。为了执行所有这些,我在Ubuntu中使用shell脚本。它完成了工作。但无论如何要让它快速。我的机器里有4个核心。如何使用所有这些。我正在使用的脚本位于
之下#!/bin/bash
cd $1
for i in $(ls *.png)
do
python ../tempcalc12.py $i
done
cd ..
tempcalc12.py是我的python脚本
这个问题可能微不足道。但我真的很喜欢编程。
谢谢
答案 0 :(得分:3)
xargs
有--max-procs= ( or -P)
选项可以并行执行此任务
以下代码最多可完成4个进程。
ls *.png | xargs -n 1 -P 4 python ../tempcalc12.py
答案 1 :(得分:1)
你可以添加一个&到python行,让所有内容并行执行:
python ../tempcalc12.py $i &
这是一个坏主意,因为有太多的进程只会减慢一切。 您可以做的是限制线程数,如下所示:
MAX_THREADS=4
for i in $(ls *.png); do
python ../tempcalc12.py $i &
while [ $( jobs | wc -l ) -ge "$MAX_THREADS" ]; do
sleep 0.1
done
done
每100毫秒,它会检查正在运行的作业的数量,如果它不如MAX_THREADS,则在后台添加新作业。
如果你只想要一个快速工作的解决方案,这是一个很好的黑客,但你可能还想调查GNU Parallel可以做什么。
答案 2 :(得分:0)
如果你有GNU Parallel,你可以这样做:
parallel python ../tempcalc12.py ::: *.png
即使您的PNG有空格,或者#34;,它也会通过每个核心生成一份工作来做正确的事情。在他们中。它还确保不同作业的输出不会混合在一起,因此如果您使用输出,则可以保证您不会从两个不同的作业中获得半个行。
GNU Parallel是一个通用的并行程序,可以很容易地在同一台机器上或在你有ssh访问权限的多台机器上并行运行作业。
如果要在4个CPU上运行32个不同的作业,并行化的直接方法是在每个CPU上运行8个作业:
GNU Parallel会在完成后生成一个新进程 - 保持CPU处于活动状态,从而节省时间:
<强>安装强>
如果没有为您的发行版打包GNU Parallel,您可以进行个人安装,不需要root访问权限。这可以在10秒内完成:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
有关其他安装选项,请参阅http://git.savannah.gnu.org/cgit/parallel.git/tree/README
了解详情
查看更多示例:http://www.gnu.org/software/parallel/man.html
观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
完成教程:http://www.gnu.org/software/parallel/parallel_tutorial.html
注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel