2013-11-02 2 views
0

subprocess.Popen (someexternalCommand)에 의해 생성되고 실행되는 5 개의 프로세스가 있습니다. 명령어가 순차적으로 시작되는 것이 중요합니다. 두 번째 프로세스는 첫 번째 프로세스가 시작되어 실행될 때까지 시작되어서는 안됩니다. 다음 코드를 사용 하였다 :파이썬에서 특정 순서로 Popen 프로세스를 실행하도록

proc1 = TrafficGenUtils.Popen(someexternalCommand) 
time.sleep(10) 
proc2 = TrafficGenUtils.Popen(someexternalCommand) 
time.sleep(10) 
... 

가 실행 순서는 프로세스의 수는 3 살 때 유지하지만, 5 거의 유지하지 않고 도움이되지 않아도 60 초 수면을 증가 없었는데. Popen 프로세스의 실행을 순차적으로 수행하는 방법. 내 코드가 Popen이 OS를 사용하여 프로세스를 생성하지만 OS가 기동 할 때마다 시작한다는 사실과 관련이있는 이유는 무엇입니까? Windows 8 및 Python 2.7을 사용하고 있습니다.

+0

프로세스가 "시작되어 실행 중일 때"어떻게 알 수 있습니까? 그런 다음 동일한 것을 찾기 위해 프로그램을 가르치기위한 코드를 작성해야합니다. 시작하는 프로세스의 코드를 제어하는 ​​경우 훨씬 쉬울 수 있습니다 (예 : 프로세스가 준비되면 새 파일이 만들어지고 주 프로그램이 새 파일이 나타날 때까지 기다릴 수 있음). BTW,'sleep()'은 프로세스 간 (또는 스레드 간) 통신 문제를 해결하기위한 거의 절대적인 접근법이 아닙니다. –

+0

감사합니다. 하지만 주 프로그램이 시작되는 프로세스를 제어 할 수는 없습니다. 프로세스는 exe 파일입니다. – user1264304

+1

그래서 다시 묻습니다. 프로세스가 "시작되어 실행 중일 때 어떻게 알 수 있습니까?" 여기에는 마법이 없습니다. 너는 알거나 너는 모른다. 모르는 경우 문제를 해결할 수 없습니다. 당신이 알고 있다면, 당신도 당신의 프로그램을 어떻게 아는 법을 가르쳐야 만합니다. –

답변

0

Popen 새 프로세스를 시작하므로 실행 시간을 예약하기 위해서는 OS에 따라 다릅니다. 하나의 프로세스가 다른 프로세스보다 먼저 실행된다고 가정 할 수 없을뿐만 아니라 부모 프로세스가 자식 프로세스를 실행할 것으로 가정 할 수도 없습니다.

시퀀스 된 실행을 만들려면 proc1.wait()을 사용하여 자식 프로세스가 실행을 완료 할 때까지 부모 프로세스를 중지 할 수 있습니다. 이렇게하면 하위 프로세스가 끝날 때까지 상위 프로세스가 진행되지 않으므로 다른 하위 프로세스가 생성되지 않으므로 프로세스가 순서대로 실행되도록 보장 할 수 있습니다.

자세한 내용은 Python Documentation을 참조하십시오.

+0

고마워.하지만, 내 문제는 내가 첫 번째 자식 프로세스가 끝내고 두 번째 자식 프로세스가 시작되는 것을 원하지 않는다는 것입니다.하지만 처음에는 시작하고, 두 번째는 시작해야합니다. 내가 proc.terminate를 부를 때까지 백그라운드에서 돌아갈거야. – user1264304