【问题标题】:GNU Parallel output to stdout using --round-robin使用 --round-robin 将 GNU 并行输出到标准输出
【发布时间】:2020-07-17 15:00:34
【问题描述】:

我正在尝试使用 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"

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

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

【问题讨论】:

    标签: gnu-parallel


    【解决方案1】:

    所有数据都保存在哪里?

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

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

    --line-buffer

    没有缓冲?

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 2013-05-01
      • 2018-04-25
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2018-08-21
      相关资源
      最近更新 更多