当前位置: 首页 > 知识库问答 >
问题:

xarg与python多处理子流程的性能对比

韦嘉颖
2023-03-14

我对xargs的性能可伸缩性有一个问题。目前,我有一个用python编写的批处理程序,带有多处理和子进程。每个进程产生一个独立的子进程。popen()执行外部命令。最近我意识到整个过程可以用xargs重做。然而,我想知道使用xargs处理10k文件是否是一个好主意,因为我以前从未用命令行工具做过如此大规模的事情。考虑到我对小数据集的测试,如果我所做的只是批量运行一组命令,这其实不是一个坏主意,因为它避免了python模块强加的许多开销循环,但我想向任何可能有更多xargs和python经验的人学习更多。更具体地说,我是否需要为xargs配置任何缓冲区限制以消耗大量输入?谢谢

共有1个答案

尚俊楠
2023-03-14

xargs程序将从标准输入中收集多个参数,并将它们粘合在一起形成一个长命令行。如果有许多许多参数,对于一个命令行来说太长,那么它将根据需要构建和执行多个命令行。

这意味着启动和关闭进程的开销更少。这对您有多大好处取决于您的进程运行的时间。如果您正在启动某种CPU密集型程序,该程序将运行半小时,那么该进程的启动时间将无关紧要。如果您正在启动一个运行速度很快的程序,但只运行了少量实例,那么节省下来的成本也将是微不足道的。然而,如果您的程序非常简单,并且需要最少的运行时间,那么您可能会注意到一个不同。

从您的问题描述来看,它似乎是这方面的一个很好的候选者。10000件,每件处理时间相对较短xargs可能会加快速度。

然而,根据我的经验,在shell脚本中做任何不平凡的工作都会带来痛苦。如果您的目录名或文件名中有空格,引用变量时出现的任何错误都会导致脚本崩溃,因此您需要对脚本进行严格测试,以确保它对所有可能的输入都有效。出于这个原因,我用Python编写了一些重要的系统脚本。

因此,如果你已经让你的程序在Python中工作,恕我直言,你会疯狂地试图将其重写为外壳脚本。

现在,如果您愿意,您仍然可以使用xargs。只需使用sub流程来运行xargs并通过标准输入传递所有参数。这获得了所有的好处,却没有痛苦。您可以使用Python在每个参数的末尾粘贴一个NUL字节chr(0),然后使用xargs--null,并且它对其中有空格的文件名是健壮的。

或者,您可以使用''。join()来构建您自己的很长的命令行,但是当您可以如上所述运行xargs时,我看不出有任何理由这样做。

 类似资料:
  • 本文向大家介绍Node.js与PHP、Python的字符处理性能对比,包括了Node.js与PHP、Python的字符处理性能对比的使用技巧和注意事项,需要的朋友参考一下 测试用例分为用函数和类来进行一个大字符串的字符逐一读取。 测试代码 Node.js 函数 类 PHP 函数 类 Python 函数 类 其中 page.html 文件内容为一个长度为 的文本。 测试结果

  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind

  • 问题内容: 我发现在Python 3.4中,用于多处理/线程的库很少:多处理vs线程与asyncio。 但是我不知道使用哪个,或者是“推荐的”。他们做的是同一件事还是不同?如果是这样,则将哪一个用于什么?我想编写一个在计算机上使用多核的程序。但是我不知道我应该学习哪个图书馆。 问题答案: 它们旨在(略有)不同的目的和/或要求。CPython(典型的主线Python实现)仍然具有全局解释器锁,因此多

  • 问题内容: 我的python脚本(python 3.4.3)通过子进程调用bash脚本: 该 bashscript 包含以下行: 这将打开与某个远程主机的共享主连接,以允许进行一些后续操作。 执行python脚本时,它将提示输入该行的密码,但是在输入密码后它将阻塞,并且永远不会返回。当我按ctrl- C终止脚本时,我看到连接已正确建立(因此行已成功执行)。 使用代替时,我没有此阻塞问题,但不检索标

  • 问题内容: 我想并行化我的Python程序,以便它可以在运行它的机器上使用多个处理器。我的并行化非常简单,程序的所有并行“线程”都是独立的,并将其输出写入单独的文件。我不需要线程交换信息,但是必须知道线程何时完成,因为管道的某些步骤取决于它们的输出。 可移植性很重要,因为我希望它可以在Mac,Linux和Windows上的任何Python版本上运行。考虑到这些限制,哪个是实现此功能的最合适的Pyt

  • 问题内容: 在效率和代码清晰性方面,决定使用线程或多处理时应遵循哪些良好准则? 问题答案: 线程和多处理之间的许多差异并不是真正针对Python的,某些差异特定于某个Python实现。 对于CPython,在以下情况下,我都将使用该模块: 由于性能原因,我需要同时使用多个内核。使用线程时,全局解释器锁(GIL)将阻止任何加速。(无论如何,有时在这种情况下您都可以避免使用线程,例如,当主要工作是在通