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 중국어 웹사이트의 기타 관련 기사를 참조하세요!