나는 저장소 목록에서 소스 코드를 다운로드하는 파이썬 스크립트가 있는데, 그 중 일부는 크다.다른 프로세스 (svn)를 지켜보기
때로는 svn이 체크 아웃 중에 중단됩니다. svn 프로세스를 감시 할 수있는 방법이 있습니까? 그래서 정지 상태인지 여부를 알 수 있습니까?
나는 저장소 목록에서 소스 코드를 다운로드하는 파이썬 스크립트가 있는데, 그 중 일부는 크다.다른 프로세스 (svn)를 지켜보기
때로는 svn이 체크 아웃 중에 중단됩니다. svn 프로세스를 감시 할 수있는 방법이 있습니까? 그래서 정지 상태인지 여부를 알 수 있습니까?
PySVN을 사용할 수 있으며 각 "이벤트"프로세스마다 콜백을 등록 할 수 있습니다. PySVN은 "취소"콜백을 폴링 할 수도 있습니다. 첫 번째 콜백은 타이머를 시작할 수 있으며 타이머가 만료되면 "취소"콜백에 False를 반환하여 체크 아웃을 취소 할 수 있습니다.
#!/usr/bin/python
url = "svn://server/path/to/repo"
path = "/path/to/local/wc"
import pysvn
import threading
# Set to something reasonable
SVN_TIMEOUT = 1000
svn_timer = None
stop_svn = False
def timer_expired():
# Too long since last SVN event, so do something sensible...
print "SVN took too long!"
global stop_svn
stop_svn = True
def svn_cancel():
return stop_svn
def notify(event_dict):
global svn_timer
if svn_timer:
svn_timer.cancel()
svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
svn_timer.start()
svn_client = pysvn.Client()
svn_client.callback_notify = notify
svn_client.callback_cancel = svn_cancel
svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
svn_timer.start()
revision = svn_client.checkout(url,path)
if svn_timer:
svn_timer.cancel()
svn 프로세스의 표준 출력을 폴링하고 새 파일을 얼마나 자주 가져올 지 테스트 할 수 있습니다. x 초 이내에 새 파일을 가져 오지 않으면 프로세스를 반송하십시오.
마스터 스크립트에서 subprocess를 사용하여 svn을 시작하고 프로세스 완료를 기다리는 동안 stdout을 폴링하십시오.
SVN은 한 번에 너무 많은 업데이트를 좋아하지 않습니다. (필자는 추측하고 있습니다.) 이 비동기를 실행하고 있습니까? 그것들을 동기식으로 실행할 수 있습니까? –
나는 그들을 다른 단어 하나 하나씩 동기화하고있다. – Purui
푸 루이 : 흠. SVN lib를 사용하거나 svn.exe를 직접 호출하고 있습니까? 라이브러리를 사용하여 각 파일을 그런 식으로 연결하고 진행 상황을 관찰 할 수는 있지만 작업량은 적을 것입니다 (별로는 아니지만 현재 수행중인 작업보다 많음). –