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