我目前正在使用GNU Parallel同时在多个大文件上运行Python脚本。我有一个主Python脚本,用于设置我需要处理的文件,然后调度Parallel以在这些文件上运行相同的工作脚本。
我需要在所有工作人员完成后将数据恢复到主线程中,而我目前只是写入文件并将其撤回。工人是否有可能将他们的腌制内容转移到STDOUT上供主人收集,或者是否有可能两个工人同时开始写STDOUT并相互交错?
基本上,STDOUT会阻塞直到另一个程序完成吗?
答案 0 :(得分:3)
在shell环境中,在后台启动各种作业,所有写入stdout
,都很有可能交错输出,因为stdout
没有锁定。
但是,GNU Parallel可以为stdout
重定向它启动的各种作业,并防止这种交错。有几个commmand line switches和各种选项。
默认输出分组:
--group
集团产出。每个作业的输出组合在一起,仅在命令完成时打印。 stderr(标准错误)首先跟着stdout(标准输出)。这需要一些CPU时间。在极少数情况下,GNU并行占用大量CPU时间,如果可以接受来自不同命令的输出混合在一起,则禁用-u
分组可以将GNU并行加速10倍。
--group
是默认值。可以使用-u
撤消。
但是其他选项,包括指向文件,都可用。