[英]Shell script: Parallelizing commands in bash script under Ubuntu linux
我正在創建一個bash腳本來無損地壓縮jpeg和png文件,因此我在Ubuntu下使用了兩個名為jpegoptim和optipng的軟件包 。 A將腳本與2或4個核心處理器一起使用。 我想使用我的CPU的全部容量。
問題是optipng默認情況下不支持多線程(它僅使用一個CPU內核),因此我決定啟動2或4個並行進程以更快地壓縮圖像。 我已經將圖像文件排序為4個幾乎相等的數組(基於像素數),現在我需要並行運行這些進程。
我正在嘗試在命令末尾用&
字符並行化進程,但不會並行進行。
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_1[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_2[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_3[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_4[@]} &)
我必須捕獲命令的輸出,所以我認為問題出在$()結構上。
看看Gnu parallel 。 它僅需對現有腳本進行少量修改就可以完成您想做的事情。
我通過taskset
和&
命令解決了我的問題。 感謝@jedwards
最終代碼如下所示:
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_1[@]}) &
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_2[@]}) &
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_3[@]}) &
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_4[@]}) &
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.