>  기사  >  백엔드 개발  >  Python에서 Bash 하위 프로세스의 병렬 실행을 달성하는 방법: 스레드와 기타 옵션?

Python에서 Bash 하위 프로세스의 병렬 실행을 달성하는 방법: 스레드와 기타 옵션?

DDD
DDD원래의
2024-10-25 16:36:15196검색

How to Achieve Parallel Execution of Bash Subprocesses in Python: Threads vs. Other Options?

Python의 멀티스레딩 Bash 하위 프로세스

스레드는 작업 병렬화에 필수적이지만 하위 프로세스 모듈과 함께 사용하는 것은 까다로울 수 있습니다. 스레드를 통해 bash 프로세스를 실행할 때는 순차적으로 실행되는 경향이 있습니다.

스레드 없는 병렬 실행

하위 프로세스를 병렬로 실행하는 데 스레드를 사용할 필요가 없습니다. 하위 프로세스 모듈의 Popen 기능은 이를 직접 처리할 수 있습니다:

<code class="python">from subprocess import Popen

commands = ['bash commands here']
processes = [Popen(cmd, shell=True) for cmd in commands]

# Perform other tasks while processes run in parallel
for p in processes:
    p.wait()</code>

동시 하위 프로세스 제한

동시 프로세스 수를 제한하려면 multiprocessing.dummy.Pool 사용을 고려하세요. multiprocessing.Pool을 모방하지만 스레드를 활용합니다:

<code class="python">from functools import partial
from multiprocessing.dummy import Pool
from subprocess import call

commands = ['bash commands here']
pool = Pool(2) # Limit to 2 concurrent processes
for _, returncode in enumerate(pool.imap(partial(call, shell=True), commands)):
    if returncode != 0:
        print(f"Command failed: {returncode}")</code>

스레드 기반 대안

프로세스 풀을 사용하지 않고 동시 프로세스를 제한하는 다른 옵션에는 스레드 대기열 조합이 포함됩니다. 또는 다음 접근 방식:

<code class="python">from subprocess import Popen
from itertools import islice

commands = ['bash commands here']
running_processes = []

for cmd in islice(commands, 2):
    running_processes.append(Popen(cmd, shell=True))

while running_processes:
    for i, process in enumerate(running_processes):
        if process.poll() is not None:
            running_processes[i] = next(islice(commands, 1), None)</code>

Unix 전용 솔루션

Unix 기반 시스템의 경우 위 접근 방식과 함께 os.waitpid() 사용을 고려하세요. 바쁜 루프를 피하십시오. 이것이 Python의 멀티스레딩 bash 하위 프로세스에 사용할 수 있는 다양한 옵션을 다루고 순차 실행 문제를 해결하기를 바랍니다. 더 궁금한 점이 있으시면 언제든지 연락주세요!

위 내용은 Python에서 Bash 하위 프로세스의 병렬 실행을 달성하는 방법: 스레드와 기타 옵션?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.