2011-03-22 4 views
1

나는 간단한 것을 놓치고 싶지만, 서브 프로세스 모듈을 사용할 때는 첫 번째 서브 프로세스를 시작하는 데 매우 중요한 대기 시간 (> 10 초)이있다. . 두 번째 것은 첫 번째 직후에 시작됩니다. 이 문제를 해결할 방법이 있습니까? 아래 코드 :파이썬 : 서브 프로세스의 첫 번째 인스턴스 .Popen()이 매우 느리다.

EDIT : 추가하려면 HWAccess (proc.py)가 dll을 연결합니다. 이것과 관련이 있을까요? EDIT2 : 테스트를 하나의 하위 프로세스로 시작 했으므로 cmd 프롬프트에서 직접 proc.py를 실행하는 것보다 HWAccess를 가져 오는 데 훨씬 오래 걸립니다. 나는 test.py

test.py를 통해 아니라 하위 프로세스로, 그것은 cmd를에서 빠르게로드하는 경우이 특별히 DLL과 아무 상관이 표시되지 않습니다 :

import subprocess 
import os 
import time 

print 'STARTING' 
proc0 = subprocess.Popen(['python','proc.py','0']) 
proc1 = subprocess.Popen(['python','proc.py','1']) 

while True: 
    try: pass 
    except KeyboardInterrupt: 
    os._exit(0) 
except ValueError: 
    pass 

시저를. 평 :

print 'Process starting...' 
import HWAccess 
print 'HWAccess imported...' 
import sys 
print 'sys imported...' 
import time 
print 'time imported...' 

print 'hi from ',sys.argv[1] 

편집 : 5 초 첫 번째에 도달하는 주위의 지문을 넣어 한 후,이 '프로세스의 시작을 ...', 두 번째 프로세스 인쇄 '프로세스가 시작 ...'직후. 그런 다음 HWAccess를 가져 오는 데 30 초의 일시 중지가 있습니다 (개별 프로세스에서 몇 초 만에 실행됩니다). 두 번째 프로세스는 즉시 HWAccess를 가져 왔습니다. HWAccess는 .dll을 링크하므로 HWAccess 가져 오기를 시도하는 두 프로세스가 협상에 약간의 시간이 걸리는 경쟁 조건이 발생하는지 궁금합니다.

+0

다른 프로세스를 사용하여 다른 Python 스크립트를 호출하려는 이유가 무엇입니까? 스크립트를 임포트하려면'import'를 사용하십시오. – kurumi

+0

10 초 지연의 원인이되는 서브 프로세스 코드에 대해서는 아무 것도 없습니다. HWAccess는 비싸거나 시간에 민감한 초기화가 있습니까? 스크립트를 직접 실행할 때'proc.py '가 얼마나 오래 인쇄물에 도달하는데 시간이 걸립니까? – samplebias

+0

HWAccess는 클래스 모음입니다. 그러나 정상적인 프로세스로 실행하면 오히려 빨리 가져옵니다 (클래스 중 하나를 인스턴스화하는 데 다소 시간이 걸리지 만 proc.py의 맨 위에 인쇄하여 서브를 시작하는 오버 헤드를 확인합니다). -방법). –

답변

2

올바른 트랙인지 확신 할 수는 없지만 프로세스 지연 (그리고 모든 파이썬 관련 문제가 아닌) 프로세스를 시작할 때 이러한 지연이 있음을 기억하고 있습니다. 네트워크 설정이 잘못 구성된 것으로 나타났습니다. 내 컴퓨터. 하위 프로세스가 시작되면 프로세스 간 통신을 설정해야하며 해당 설정이 간섭 할 수 있습니다.

내 문제는 네트워크에 제대로 구성되지 않은 컴퓨터에 허위 호스트 이름을 사용하는 것과 관련되어 있음을 기억합니다. 귀하의 사례인지 확인할 수 있습니까? 프로덕션 시스템이 아닌 경우에는 호스트 이름을 "localhost"로 설정하지 마십시오.

관련 문제