이전에, 나는 $ 세트에 같은 코드에 대해 두 개의 명령을 실행합니다 : 명령 명령을 저장하기 위해 동일한 두 명령을 실행하려면 시간python 실행 동시에 다중 명령
메이크덕분 threading 모듈 린에
이전에, 나는 $ 세트에 같은 코드에 대해 두 개의 명령을 실행합니다 : 명령 명령을 저장하기 위해 동일한 두 명령을 실행하려면 시간python 실행 동시에 다중 명령
메이크덕분 threading 모듈 린에
스레딩 모듈은 전역 인터프리터 잠금 (Global Interpreter Lock)으로 인해 많은 성능을 제공하지 않습니다.
이 방법을 사용하는 가장 좋은 방법은 subprocess
모듈을 사용하고 각 명령을 자체 표준 출력으로 여는 것입니다.
processes = {}
for cmd in ['cmd1', 'cmd2', 'cmd3']:
p = subprocess.Popen('cmd1', stdout=subprocess.PIPE)
processes[p.stdout] = p
while len(processes):
rfds, _, _ = select.select(processes.keys(), [], [])
for fd in rfds:
process = processses[fd]
print fd.read()
if process.returncode is not None:
print "Process {0} returned with code {1}".format(process.pid, process.returncode)
del processes[fd]
당신은 기본적으로 준비가되어있는 파일 디스크립터보고 선택을 사용해야합니다 당신은 "읽기"그들이 종료 발생하고 있는지 확인하기 위해 자신의 반환 코드를 확인해야합니다. 프로세스는 기본적으로 stdout이 닫힐 때까지 대기 상태가됩니다. 기다리는 동안 몇 가지 일을하고 싶다면 select.select()에 시간 초과를 두어 오랜 시간 후에 기다리는 것을 멈출 수 있습니다. rfds의 길이를 테스트 할 수 있고 0이면 시간 초과가 발생했음을 알 수 있습니다.
찾는 병렬 방법 등을들 수있다.
twisted
또는 select
모듈은 아마도 내가 본 것일 것입니다.
당신이 원하는 모든 배치 명령, 쉘 스크립트의 무리 인 경우, 즉
#!/bin/sh
for i in "command1 command2 command3"; do
$i &
done
더 잘 작동 할 수 있음. 또는, 당신이 말하는 Makefile이 말했습니다.
http://docs.python.org/library/threading.html – GWW
에 대해 읽어보십시오. 왜 'subprocess.Popen()'을 사용하지 않습니까? –