> 백엔드 개발 > 파이썬 튜토리얼 > \'cat |의 병렬 실행을 달성하는 방법 | Python에서 하위 프로세스를 사용하는 zgrep\' 명령이 있습니까?

\'cat |의 병렬 실행을 달성하는 방법 | Python에서 하위 프로세스를 사용하는 zgrep\' 명령이 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-03 05:21:30
원래의
506명이 탐색했습니다.

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

Python에서 'cat' 하위 프로세스의 병렬 실행

아래 코드 조각은 여러 'cat | zgrep' 명령을 실행하여 출력을 개별적으로 수집합니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<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' 클래스를 사용할 수 있습니다. 수정된 코드는 다음과 같습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<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>

로그인 후 복사

이 코드는 'cat | zgrep' 명령. 'communicate()' 메소드는 각 프로세스의 출력을 수집하는 데 사용되며, 이는 'process_data' 함수에 전달됩니다.

참고: 'Popen' 클래스를 직접 사용하면 병렬성을 달성하기 위해 명시적인 스레딩이나 다중 처리 메커니즘이 필요하지 않습니다. 동일한 스레드 내에서 동시에 여러 하위 프로세스의 생성 및 실행을 처리합니다.

위 내용은 \'cat |의 병렬 실행을 달성하는 방법 | Python에서 하위 프로세스를 사용하는 zgrep\' 명령이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿