如何实现\'cat | 的并行执行zgrep\' 在 Python 中使用子进程的命令?

Mary-Kate Olsen
发布: 2024-11-03 05:21:30
原创
477 人浏览过

How to achieve parallel execution of 'cat | zgrep' commands using subprocesses in Python?

Python 中“cat”子进程的并行执行

下面的代码片段演示了多个“cat |”的顺序执行zgrep' 命令在远程服务器上,单独收集它们的输出。

<code class="python">import multiprocessing as mp

class MainProcessor(mp.Process):
    def __init__(self, peaks_array):
        super(MainProcessor, self).__init__()
        self.peaks_array = peaks_array

    def run(self):
        for peak_arr in self.peaks_array:
            peak_processor = PeakProcessor(peak_arr)
            peak_processor.start()

class PeakProcessor(mp.Process):
    def __init__(self, peak_arr):
        super(PeakProcessor, self).__init__()
        self.peak_arr = peak_arr

    def run(self):
        command = 'ssh remote_host cat files_to_process | zgrep --mmap "regex" '
        log_lines = (subprocess.check_output(command, shell=True)).split('\n')
        process_data(log_lines)</code>
登录后复制

但是,这种方法会导致“ssh ... cat ...”命令的顺序执行。这个问题可以通过修改代码来并行运行子进程,同时仍然单独收集它们的输出来解决。

解决方案

要在Python中实现子进程的并行执行,您可以使用“subprocess”模块中的“Popen”类。这是修改后的代码:

<code class="python">from subprocess import Popen
import multiprocessing as mp

class MainProcessor(mp.Process):
    def __init__(self, peaks_array):
        super(MainProcessor, self).__init__()
        self.peaks_array = peaks_array

    def run(self):
        processes = []
        for peak_arr in self.peaks_array:
            command = 'ssh remote_host cat files_to_process | zgrep --mmap "regex" '
            process = Popen(command, shell=True, stdout=PIPE)
            processes.append(process)

        for process in processes:
            log_lines = process.communicate()[0].split('\n')
            process_data(log_lines)</code>
登录后复制

此代码创建多个“Popen”进程,每个进程运行“cat |”之一。 zgrep' 命令。 'communicate()' 方法用于收集每个进程的输出,然后将其传递给 'process_data' 函数。

注意: 直接使用 'Popen' 类不会不需要显式的线程或多处理机制来实现并行性。它在同一线程内同时处理多个子进程的创建和执行。

以上是如何实现\'cat | 的并行执行zgrep\' 在 Python 中使用子进程的命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板