2011-08-11 7 views
5

urllib2를 사용하여 URL 요청을 수행하는 python 스크립트가 있습니다. 비동기 적으로 실행되고 기능을 수행하는 5 개의 프로세스 풀이 있습니다. 이 함수는 url을 호출하고, 데이터를 가져 와서 필요한 형식으로 구문 분석하고, 계산을 수행하고 데이터를 삽입하는 함수입니다. 데이터의 양은 각 URL 요청마다 다릅니다.stuck python 프로세스를 모니터

나는이 스크립트를 cron 작업을 사용하여 5 분마다 실행합니다. 가끔 ps -ef | grep python 할 때, 나는 막힌 프로세스를 참조하십시오. 프로세스를 추적 할 수있는 다중 처리 클래스 내에서의 프로세스 의미를 추적 할 수있는 방법이 있습니까? 예를 들어, 상태 의미가 완료되었거나 지연되었거나 죽었습니까? 추적 할 수있는 방법이

try: 
    Url = "http://gotodatasite.com" 

    data = urllib2.urlopen(Url).read().split('\n') 
except URLError, e: 
    print "Error:",e.code 
    print e.reason 
    sys.exit(0) 

:

내가 비동기가

pool = Pool(processes=5) 
pool.apply_async(getData,) 

을 처리 호출하는 방법이 있습니다 그리고 다음은 urllib2가 요청을 수행 GetData의의 일부입니다 : 여기에 코드입니다 프로세스를 멈추고 다시 실행하십시오.

+1

"stuck?" 이것이 무엇을 의미하는지 설명 할 수 있습니까? –

+0

왜'multiproccesing' 명령으로 실행해야합니까? 여러 cron 작업을 사용하는 것이 잘못된 이유는 무엇입니까? –

+0

@Andrew : 걸림돌로 말하면 프로세스를 중단했습니다. – ash

답변

1

다중 처리를 사용하려는 경우 ping 메커니즘을 구현하십시오. 느린 I/O로 인해 멈춘 프로세스를 찾고 있습니까?

개인적으로는 큐 (필요하지 않게 큐 서버)으로 갈 것, 예를 ~/jobs에 대한 후 첫 직장을 받아이를 수행하는 프로그램을 가지고 작업 할 수있는 URL 목록을 말한다. 그렇다면 그것은 부기의 문제 일뿐입니다. 프로그램이 시작될 때 프로그램의 PID가 무엇인지, PID가 무엇인지 등을 기록하십시오. 느린 일자리를 없애려면 PID 만 죽이고 실패한 것으로 표시하십시오.

0

Google for urllib2 및 시간 초과 제한 시간에 도달하면 예외가 발생하며 프로세스가 더 이상 작동하지 않습니다.

관련 문제