多个程序可以同时写入STDOUT吗?

时间:2015-02-15 10:15:29

标签: python multithreading parallel-processing multiprocessing stdout

我目前正在使用GNU Parallel同时在多个大文件上运行Python脚本。我有一个主Python脚本,用于设置我需要处理的文件,然后调度Parallel以在这些文件上运行相同的工作脚本。

我需要在所有工作人员完成后将数据恢复到主线程中,而我目前只是写入文件并将其撤回。工人是否有可能将他们的腌制内容转移到STDOUT上供主人收集,或者是否有可能两个工人同时开始写STDOUT并相互交错?

基本上,STDOUT会阻塞直到另一个程序完成吗?

1 个答案:

答案 0 :(得分:3)

在shell环境中,在后台启动各种作业,所有写入stdout,都很有可能交错输出,因为stdout没有锁定。

但是,GNU Parallel可以为stdout重定向它启动的各种作业,并防止这种交错。有几个commmand line switches和各种选项。

默认输出分组:

  

--group
  集团产出。每个作业的输出组合在一起,仅在命令完成时打印。 stderr(标准错误)首先跟着stdout(标准输出)。这需要一些CPU时间。在极少数情况下,GNU并行占用大量CPU时间,如果可以接受来自不同命令的输出混合在一起,则禁用-u分组可以将GNU并行加速10倍。

     

--group是默认值。可以使用-u撤消。

但是其他选项,包括指向文件,都可用。