이 Python 스크립트에서는 여러 개의 'cat | zgrep' 명령은 원격 서버에서 순차적으로 실행되며 해당 출력은 처리를 위해 개별적으로 수집됩니다. 그러나 효율성을 높이기 위해 이러한 명령을 병렬로 실행하는 것을 목표로 합니다.
멀티 프로세싱이나 스레딩을 사용하는 것과 달리 다음 접근 방식을 사용하여 하위 프로세스를 병렬로 실행할 수 있습니다.
<code class="python">#!/usr/bin/env python from subprocess import Popen # create a list of subprocesses processes = [Popen("echo {i:d}; sleep 2; echo {i:d}".format(i=i), shell=True) for i in range(5)] # collect statuses of subprocesses exitcodes = [p.wait() for p in processes]</code>
이 코드는 5개의 셸 명령을 동시에 실행하고 종료 코드를 수집합니다. Popen은 기본적으로 명령이 완료될 때까지 기다리지 않으므로 이 컨텍스트에서는 & 문자가 필요하지 않습니다. 상태를 검색하려면 .wait()를 명시적으로 호출해야 합니다.
하위 프로세스의 출력을 순차적으로 수집하는 것이 편리하지만 원하는 경우 병렬 수집을 위해 스레드를 사용할 수도 있습니다. . 다음 예를 고려하십시오.
<code class="python">#!/usr/bin/env python from multiprocessing.dummy import Pool # thread pool from subprocess import Popen, PIPE, STDOUT # create a list of subprocesses with output handling processes = [Popen("echo {i:d}; sleep 2; echo {i:d}".format(i=i), shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) for i in range(5)] # collect outputs in parallel def get_lines(process): return process.communicate()[0].splitlines() outputs = Pool(len(processes)).map(get_lines, processes)</code>
이 코드는 하위 프로세스를 병렬로 실행하고 스레드를 사용하여 동시에 해당 출력을 수집합니다.
Python 버전 3.8 및 위에서 asyncio는 하위 프로세스를 동시에 실행하는 우아한 방법을 제공합니다. 예는 다음과 같습니다.
<code class="python">#!/usr/bin/env python3 import asyncio import sys from subprocess import PIPE, STDOUT async def get_lines(shell_command): p = await asyncio.create_subprocess_shell( shell_command, stdin=PIPE, stdout=PIPE, stderr=STDOUT ) return (await p.communicate())[0].splitlines() async def main(): # create a list of coroutines for subprocess execution coros = [get_lines(f'"{sys.executable}" -c "print({i:d}); import time; time.sleep({i:d})"') for i in range(5)] # get subprocess outputs in parallel print(await asyncio.gather(*coros)) if __name__ == "__main__": asyncio.run(main())</code>
이 코드는 단일 스레드 내에서 하위 프로세스를 동시에 실행하는 방법을 보여줍니다.
이러한 접근 방식을 구현하면 여러 ' 고양이 | zgrep' 명령을 원격 서버에서 병렬로 실행합니다.
위 내용은 여러 개의 'cat를 실행하는 방법 | zgrep' 명령이 Python에서 동시에 실행됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!