【问题标题】:Can multiple programs write to STDOUT at the same time?多个程序可以同时写入 STDOUT 吗?
【发布时间】:2015-02-15 10:15:28
【问题描述】:

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

当所有工作人员完成后,我需要将数据返回到主线程,而我目前只是写入文件并将它们拉回。工人是否可以将腌制的内容转储到 STDOUT 以供 master 收集,或者是否有可能两个工人可以同时开始写入 STDOUT 并相互交错?

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

【问题讨论】:

  • 你说的是多线程还是多进程?
  • 抱歉 - 这是多个进程。我使用“getoutput”运行带有参数列表的“parallel script.py”。
  • 好的。请注意,每个进程都有自己的标准输出。处理交错等问题是任何消耗标准输出的工作。
  • 为什么不完全使用 Python 已有的并行处理 API。 wiki.python.org/moin/ParallelProcessingpypi.python.org/pypi/processing 值得一看吗?

标签: python multithreading parallel-processing multiprocessing stdout


【解决方案1】:

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

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

默认输出是分组的:

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

--group 是默认值。可以用-u 反转。

但也可以使用其他选项,包括定向到文件。

【讨论】:

  • 我的好先生,您简直就是救生员。我已经搜索了这个功能的高低,这正是我正在寻找的。​​span>
猜你喜欢
  • 2012-01-26
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
相关资源
最近更新 更多