使用 --round-robin 将 GNU Parallel 输出到 stdout

Re'*_*'em 2 gnu-parallel

我正在尝试使用 GNU Parallel 来帮助我处理一些我不想在本地保存的远程文件。

我的命令看起来有点像:

python list_files.py | \
  parallel -j5 'aws s3 cp s3://s3-bucket/{} -' | \
    parallel -j5 --round --pipe -l 5000 "python process_and_print.py"
Run Code Online (Sandbox Code Playgroud)

process_and_print.py打印某些输入行的输出,但该输出并没有像我预期的那样立即到达标准输出,而是在该过程完成后才看到输出。如果我删除--round参数,一切都按预期工作。

所有这些数据都保存在哪里?我有没有办法将它逐行打印到标准输出,而无需缓冲?

Ole*_*nge 6

所有这些数据都保存在哪里?

来自 GNU Parallel 的所有缓冲输出都缓冲在 $TMPDIR / 中的临时文件中--tmpdir,默认为/tmp. 您无法看到这些文件,因为如果 GNU Parallel 被杀死,它们会立即被删除(但保持打开状态)以避免您必须清理。

我有没有办法将它逐行打印到标准输出,

--line-buffer

没有缓冲?

-u 一起禁用缓冲,但是您不能保证逐行。

--line-buffer从版本 20170822 开始在内存中缓冲一整行,因此不会在/tmp.