Python 使用shell脚本的多线程
我正在使用python脚本在图像中执行一些计算,并将获得的数组保存到.png文件中。我处理3000到4000张图像。为了执行所有这些,我在Ubuntu中使用了一个shell脚本。它完成了任务。但无论如何都有办法让它快点。我的机器有4个磁芯。如何使用它们。下面是我正在使用的脚本Python 使用shell脚本的多线程,python,multithreading,bash,Python,Multithreading,Bash,我正在使用python脚本在图像中执行一些计算,并将获得的数组保存到.png文件中。我处理3000到4000张图像。为了执行所有这些,我在Ubuntu中使用了一个shell脚本。它完成了任务。但无论如何都有办法让它快点。我的机器有4个磁芯。如何使用它们。下面是我正在使用的脚本 #!/bin/bash cd $1 for i in $(ls *.png) do python ../tempcalc12.py $i done cd .. tempc12.py是我的python脚本 这个问题可能微不
#!/bin/bash
cd $1
for i in $(ls *.png)
do
python ../tempcalc12.py $i
done
cd ..
tempc12.py是我的python脚本
这个问题可能微不足道。但我对编程真的很陌生
谢谢您只需在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
每隔100ms,它将检查正在运行的作业的数量,如果低于MAX_线程,则在后台添加新作业
如果您只是想要一个快速工作的解决方案,那么这是一个很好的解决方案,但您可能还想研究可以做什么。xargs有-max procs=或-p选项,它可以并行执行此任务。
以下代码最多在4个进程中执行此任务
ls *.png | xargs -n 1 -P 4 python ../tempcalc12.py
如果您有GNU并行,您可以执行以下操作:
parallel python ../tempcalc12.py ::: *.png
它将通过为每个核心生成一个作业来做正确的事情,即使您的PNG名称中有空格',或在其中。它还确保不同作业的输出不会混合在一起,因此如果使用输出,可以保证不会从两个不同作业中得到半行
GNU Parallel是一个通用的并行程序,它使得在同一台机器上或在您有ssh访问权的多台机器上并行运行作业变得非常容易
如果您有32个不同的作业要在4个CPU上运行,并行化的直接方法是在每个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
有关其他安装选项,请参阅
了解更多
请参阅更多示例:
观看介绍视频:
浏览本教程:
注册电子邮件列表以获得支持: