标签: parallelism

穷人的 GNU Parallel 在 ksh 中实现?

我想使用GNU 并行的功能,它可以并行执行命令和列表,并在完成后将其吐出,但是,我不想在我们所有的服务器上安装 GNU 并行。

或者也许是xargs?

是否有 GNU Parallel 的 ksh 实现?在这种情况下,它不必像 GNU Parallel 那样按顺序完成——只要所有输出都可以通过管道传输或存储即可。我还想避免使用临时文件。

ksh gnu parallelism gnu-parallel

8
推荐指数
1
解决办法
1092
查看次数

一个程序在多个文件上并行执行

我有一个小脚本,它循环遍历文件夹的所有文件并执行(通常是持久的)命令。基本上是

for file in ./folder/*;
do
    ./bin/myProgram $file > ./done/$file
done
Run Code Online (Sandbox Code Playgroud)

(请忽略语法错误,这只是伪代码)。

我现在想同时运行这个脚本两次。显然,如果 ./done/$file 存在,则不需要执行。所以我把脚本改成了

for file in ./folder/*;
do
    [ -f ./done/$file ] || ./bin/myProgram $file >./done/$file
done
Run Code Online (Sandbox Code Playgroud)

所以基本上问题是:两个脚本(或通常不止一个脚本)是否可能实际上处于同一点并检查done失败且命令运行两次的文件是否存在?

这将是完美的,但我非常怀疑。这太容易了 :D 如果他们处理同一个文件可能发生,是否有可能以某种方式“同步”脚本?

scripting shell-script parallelism

8
推荐指数
1
解决办法
9156
查看次数

用于在存档中存储文件的虚拟只写文件系统

我有一个令人尴尬的并行过程,它创建了大量几乎(但不完全)相同的文件。有没有办法“即时”存档文件,以便数据不会占用不必要的空间?

进程本身接受命令行参数并将创建的每个文件的名称打印到标准输出。我正在调用它,parallel --gnu它负责分配输入(来自另一个进程)和收集输出:

arg_generating_process | parallel --gnu my_process | magic_otf_compressor
Run Code Online (Sandbox Code Playgroud)

管道第一部分的简单示例bash

for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
Run Code Online (Sandbox Code Playgroud)

怎么可能magic_otf_compressor长得像?它应该将每个输入行视为文件名,将每个文件复制到压缩.tar存档(处理所有文件的存档相同!),然后将其删除。(实际上,打印每个处理文件的名称应该就足够了,另一个| parallel --gnu rm可以负责删除文件。)

有没有这样的工具?我不考虑单独压缩每个文件,这会浪费太多空间。我已经研究过archivemount(将文件系统保留在内存中 -> 不可能,我的文件太大太多)和avfs(无法让它与 FUSE 一起工作)。我错过了什么?

我离自己破解这样一个工具只有一步之遥,但之前肯定有人做过......

编辑:基本上我想我正在寻找一个标准输入前端libtar(而不是从命令行tar读取参数的命令行前端)。

filesystems tar fuse parallelism

8
推荐指数
2
解决办法
690
查看次数

使用 wget 并行下载多个文件

我有以下 bash 脚本:

for i in {0800..9999}; do
    for j in {001..032}; do
        wget http://example.com/"$i-$j".jpg
    done
done
Run Code Online (Sandbox Code Playgroud)

所有照片都存在,实际上每次迭代都不依赖于另一个。如何在控制线程数的情况下并行化它?

bash wget parallelism

8
推荐指数
1
解决办法
1万
查看次数

可以$!在并行运行的脚本中使用时会导致竞争条件吗?

假设我有多个并行运行的 bash 脚本,代码如下:

#!/bin/bash

tail -f /dev/null &
echo "pid is "$!
Run Code Online (Sandbox Code Playgroud)

$!保证给我最近的后台任务的PID该脚本,或者是最近的后台任务在全球范围?我只是好奇,当它返回的 PID 来自另一个脚本中启动的进程时,依赖此功能是否会导致竞争条件。

bash shell-script parallelism

8
推荐指数
1
解决办法
1164
查看次数

对大型 CSV 文件 (90GB) 进行排序,超出磁盘配额

这是我现在所做的,

sort -T /some_dir/ --parallel=4 -uo file_sort.csv -k 1,3 file_unsort.csv

该文件是 90GB,我收到此错误消息

sort: close failed: /some_dir/sortmdWWn4: Disk quota exceeded

以前,我没有使用 -T 选项,显然 tmp 目录不足以处理这个问题。我当前的目录有大约 200GB 的可用空间。排序临时文件还不够吗?

我不知道并行选项是否会影响事情。

large-files disk-usage sort parallelism

7
推荐指数
1
解决办法
2274
查看次数

在多个文件夹中并行运行脚本

我在高级目录中有几个子目录。每个子目录都有几个文件和一个 for 循环 shell 脚本。每个子目录中都存在相同的 for 循环脚本。我想进入每个子目录并在多个终端中并行运行 for 循环脚本。我试过这个,但它似乎是连续执行的(一个接一个),但我想并行运行所有这些。

find dir_* -type f -execdir sh for_loop.sh {} \;
Run Code Online (Sandbox Code Playgroud)

bash shell-script files parallelism

7
推荐指数
3
解决办法
5996
查看次数

在 bash 脚本中一次启动 100 个进程

在 bash 脚本中,我有一个这样的程序

for i in {1..1000}
do
   foo i
done
Run Code Online (Sandbox Code Playgroud)

我用参数调用函数foo1000 次i

如果我想让它在多进程中运行,但不是同时运行,我该怎么办?

所以如果我有

for i in {1..1000}
do
   foo i &
done
Run Code Online (Sandbox Code Playgroud)

它会同时启动所有 1000 个进程,这不是我想要的。

有没有办法确保始终有 100 个进程在运行?如果某些过程完成,则开始一些新的过程,直到所有 1000 次迭代完成。或者,我可以等到所有 100 个都完成后,再运行另外 100 个。

shell-script parallelism

7
推荐指数
3
解决办法
4257
查看次数

将 A 的标准输出并行传输到 B 是否安全

我在跑A file | B --params > file.txt。由于我想加快处理速度,所以我使用了parallel -j+0< a.txt并发运行 20 个作业。a.txt 包含所有命令:

A file1 | B --params > file1.txt 

A file2 | B --params > file2.txt

A fileN | B --params > fileN.txt
Run Code Online (Sandbox Code Playgroud)

这种方式安全吗?并行运行时,来自不同程序的标准输出会被弄乱吗?

pipe output parallelism gnu-parallel

6
推荐指数
1
解决办法
452
查看次数

如何在 fgrep/Ag 中更快地进行此搜索?

我正在考虑使搜索更快和/或更好的方法,主要使用fgrepor agand不区分大小写地搜索单词at$HOME并将匹配列表重定向到的代码vim

find -L $HOME -xtype f -name "*.tex" \
   -exec fgrep -l -i "and" {} + 2>/dev/null | vim -R -
Run Code Online (Sandbox Code Playgroud)

这是更快,有ag因为并行的和ack

find -L $HOME -xtype f -name "*.tex" \
   -exec ag -l -i "and" {} + 2>/dev/null | vim -R -
Run Code Online (Sandbox Code Playgroud)

统计数据

小群的平均统计信息fgrep,并ag通过time

        fgrep   ag     terdon1  terdon2  terdon3  muru 
user    0.41s   0.32s  0.14s    0.22s    0.18s    0.12s
sys     0.46s   0.44s  0.26s    0.28s    0.30s …
Run Code Online (Sandbox Code Playgroud)

grep time parallelism ag

6
推荐指数
2
解决办法
774
查看次数