2010-03-01 4 views
4

나는 스크립트에서 실행되는 다음과 같은 코드가 있습니다파이썬 : 제어 시간 제한 길이

try: 
    s = ftplib.FTP('xxx.xxx.xxx.xxx','username','password') 

except: 
    print ('Could not contact FTP serer') 
    sys.exit() 

FTP 사이트에 액세스 할 수없는 경우, 스크립트는 거의 '정지'것 ... 그것은 복용을 약 75 sys.exit()이 호출되기 전에 평균으로 초가 걸린다 ... 나는 75 초가 아마도 매우 주관적이며이 시스템이 실행되는 데 의존한다는 것을 안다.하지만 파이썬을 사용하면이 방법을 한 번 사용해 볼 수있다. 만약 실패한다면, 즉시 퇴장하시오. 이 플랫폼은 Mac OS X 10.5/python 2.5.1입니다. 당신이 doc 보면

답변

7

2.6부터는 FTP constructor는 선택 timeout 매개 변수가 있습니다 :

class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])

돌아 가기 FTP 클래스의 새 인스턴스를. host가 주어지면 connect (host) 메소드 호출이 이루어진다. user가 주어질 때, 메소드 호출 인 login (user, passwd, acct)이 추가됩니다 (passwd와 acct는 지정되지 않은 경우 빈 문자열을 기본값으로 사용합니다). 선택적 timeout 매개 변수는 연결 시도와 같은 차단 작업의 시간 제한을 초 단위로 지정합니다 (지정하지 않으면 전역 기본 시간 제한 설정이 사용됩니다).

버전 2.6에서 변경 : 제한 시간이 추가되었습니다. 최대 버전 2.3을 시작으로

, 전역 기본 시간 제한은 활용 될 수있다 :

socket.setdefaulttimeout(timeout)

새로운 소켓 개체에 대한 초 부동의 기본 제한 시간을 설정합니다. 값이 None이면 새 소켓 객체에 시간 초과가 없음을 나타냅니다. 소켓 모듈을 처음 가져올 때 기본값은 없음입니다.

버전 2.3의 새로운 기능. 당신은 파이썬 2.5에 있기 때문에

+0

감사합니다. @SilentGhost가 언급했듯이 ... 2.5.1을 사용하고 있습니다 ....모든 클라이언트 컴퓨터가 Mac OS X 10.5를 실행하고 있기 때문에 잠겨 있습니다. 파이썬의 설치된 버전을 만질 수 없습니다 – cit

+0

운이 좋으면 2.3 이상에서 전역 소켓 시간 초과를 설정할 수 있습니다. – gimel

1

, 시간 제한 매개 변수가 있습니다.

class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])¶

아마도 당신은 사용할 수 있습니다.

+1

파이썬 2.6 기능인 OP는 py2.5.1을 사용합니다. – SilentGhost

2

, 당신은 사용하여 (FTP 요청을 포함하여) 모든 소켓 작업을위한 글로벌 시간 제한을 설정할 수 있습니다

socket.setdefaulttimeout() 

1

(이 파이썬 2.3에서 추가되었다) 'socket.setdefaulttimeout()'을 사용하여 제안한 사람들의 의견입니다. 내부적으로 ftplib은 sock.makefile()을 사용합니다. 파이썬 문서에 따르면 makefile()과 시간 초과를 섞어서는 안됩니다. 구체적으로 : http://docs.python.org/library/socket.html#socket.socket.makefile

물론 나는 어떤 문제도 보지 못했다고 말할 수는 없습니다.