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>
이 코드는 'cat | zgrep' 명령. 'communicate()' 메소드는 각 프로세스의 출력을 수집하는 데 사용되며, 이는 'process_data' 함수에 전달됩니다.
참고: 'Popen' 클래스를 직접 사용하면 병렬성을 달성하기 위해 명시적인 스레딩이나 다중 처리 메커니즘이 필요하지 않습니다. 동일한 스레드 내에서 동시에 여러 하위 프로세스의 생성 및 실행을 처리합니다.
위 내용은 \'cat |의 병렬 실행을 달성하는 방법 | Python에서 하위 프로세스를 사용하는 zgrep\' 명령이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!