使用--round-robin将GNU并行输出到stdout

时间:2017-06-17 14:17:09

标签: 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"

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

所有数据都保存在哪里?我有办法将它逐行打印到stdout,而不进行缓冲吗?

1 个答案:

答案 0 :(得分:3)

  

所有数据都保存在哪里?

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

  

我有办法将它逐行打印到stdout,

--line-buffer

  

没有缓冲?

-u禁用所有缓冲,但是你无法逐行保证。

--line-buffer在20170822版本的内存中缓冲整行。