2009-08-20 4 views
0

jetbrains 툴 teamcity 용 플러그인을 작성했습니다. 꽤 많은 서버 리스너입니다. 트리거되는 빌드를 청취하고 트리거 한 것과 같은 다른 빌드에 대한 정보가있는 텍스트 파일을 출력합니다. 얼마나 많은 변경이 있었는지 등등. 끝나면 입력 할 수있는 파이썬 스크립트를 작성했습니다. 서버가 실행 중이고 빌드가 진행되는 동안 팀 정보에 대한 정보. 빌드가 실행 된 후에 해당 빌드의 아티팩트를 가져올 수 있기를 원하지만 문제는 각 빌드를 실행하는 데 얼마나 오래 걸리는지 알 수 없다는 것입니다. 때로는 30 초 다른 30 분입니다.서버 리스너에 관한 Python 질문

그래서이 줄을 파이썬으로 빌드합니다. 내 텍스트 파일을 가져 줄을 사용하려는 빌드 실행 (시간의 일부 indetermined 양) 후

urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>') 

.

urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>') 

는 다시 문제는 내가 두 번째 줄을 실행하기 전에 대기 할 시간을 모르는 것입니다. 일반적으로 자바에서는 특정 양의 시간 동안 잠들고 빌드가 완료 될 때까지 기다리는 두 번째 종류의 스레드를 수행합니다. 파이썬에서이 작업을 수행하는 방법을 잘 모르겠습니다. 그래서 누군가 파이썬에서 이것을하는 방법이나 이것을하기위한 더 좋은 방법에 대한 아이디어를 가지고 있다면 나는 그것을 고맙게 생각할 것입니다. 더 잘 설명해 주시면 알려주세요. 당신은 많은 문제없이 것을 사용할 수 있어야하므로

Grant-

+1

빌드가 완료되지 않고 두 번째 전화를 걸면 어떻게됩니까? – Christopher

+0

http 404 오류와 함께 다시 나타납니다. 텍스트 파일은 빌드가 완료되면 서버의 해당 위치에만 있기 때문에 존재하지 않는 html 페이지에 액세스하는 것과 같습니다. – cozmokramer8

답변

2

를 사용하는 경우 투표하기. 다른 주석에 표시된대로 스레드를 생성 할 수 있습니다. 주 스크립트 대기 상태와 폴링 만 있습니다. 같은

뭔가 : 대안으로

wait=True 
while wait: 
    url=urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>') 
    if url.getcode()!=404: 
    wait=False 
    else: 
    time.sleep(60) 

, 당신은 CherryPy를 사용할 수 있습니다. 그런 다음 빌드가 완료되면 말을 듣거나 CherryPy 서버에 연결하여 URL을 다운로드하도록 앱을 실행할 수 있습니다.

xmlrpclib를 사용하여 유사한 작업을 수행 할 수도 있습니다.

+0

나는 그 때 설문 조사를해야 할 것 같아. 대안에 대한 귀하의 제안이 마음에 들었지만 현재 서버에 설치된 것만 사용해야하므로 다소 제한적입니다.이것은 꽤 큰 회사를위한 것이고 나는 심지어 파이썬 라이브러리를 추가로 설치할 수있는 옵션을 가지고 있지 않다. ( 코드에 감사드립니다.이 방법은 나쁜 코딩 방법으로 간주되는 것입니까? 하지만 분명히 꽤 자주 발생해야합니다. 감사합니다. 그랜트 – cozmokramer8

+0

인터럽트 구동 또는 폴 기반 알림에 대한 질문이 많습니다. 폴링이 더 효율적일 때가 있습니다. 이벤트 알림이 더 효율적일 수 있습니다. 설문 조사를 할 때 한 가지 방법은 설문 조사 간격을 구성 할 수있는 것이 가장 좋은 방법입니다. 하나의 진정한 투표 간격. – Christopher

+0

잘 감사드립니다. 크리스토프 당신은 큰 도움이되었습니다. 팁을 주셔서 감사합니다. 구성 할 수있는 좋은 아이디어입니다. 또한 누군가가 미래에 조언을 얻기 위해이 글을 읽는다면 25 분 후에 루프가 깨지게 될 것입니다. 나는 누군가가 빌드를 시작한 다음 인터럽트 할 기회가 생겨서 텍스트 파일이 출력되지 않기 때문에이 작업을 수행했습니다. 그런 다음이 스크립트를 실행하면 연속 루프가됩니다. 부여 - – cozmokramer8

0

파이썬은 실제로 자바 상당히 유사한 threading system 있습니다.

그러나

당신이해야 할 모든 시간의 일부 일정량을 기다리는 당신이 빌드 서버 문의 당신, 그것이 할 수있는 유일한 방법을함으로써 알림을받을 얻을하지 않는 한

import time 
time.sleep(300) # sleep for 300 seconds 
+0

이것은 다소 내가 생각하고있는 것이지만 얼마만큼의 시간인지는 알 수 없습니다. 내 원래 생각은 너무 많은 초 동안 같은 time.sleep() 명령을 수행하고 파일을 찾으려고했습니다. 그리고 HTTP 404 오류를 반환하면 다른 초 동안 잠을 자고 다시 시도하십시오. 이것은 마치 추악한 접근 방식처럼 보이고, 나는 더 우아한 해결책을 기대하고있었습니다. – cozmokramer8

+0

아, 링크도 주셔서 감사합니다. :) – cozmokramer8

+0

@ cozmokramer8 : "폴링"또는 "바쁜 대기"라고하며이 경우 유일한 선택입니다. –