2017-05-12 6 views
0

사용 케이스 파일을 다운로드 :거래하는 동안 서버에서

에디터를 이용해 수백이 같은 구조 (50메가바이트/파일 바이트의 크기) XMLS 파일의 수천/년 - 월/년 - 월 - 일의/ftplib로 시간/파일. 그래서 나는 주어진 시간 동안 각각의 시간 폴더를 반복하고 각각 하나씩 모든 파일 이름을 ftp.nlst()로 저장 한 다음, 각 파일 이름을 반복하고 이와 같은 관련 파일을 donwload합니다.

with open(local_file, 'wb') as fhandle: 
    try: 
     ftp.retrbinary('RETR ' + filename, fhandle.write) 
    except EOFError: 
     try: 
      fhandle.close() 
      os.remove(local_file) 
      ftp = ftplib.FTP() 
      ftp.connect(self.remote_host,self.port, timeout=60) 
      ftp.login(self.username, self.passwd, acct="") 
      ftp.cwd(self.input_folder + '/' + subdir) 
      try: 
       with open(local_file, 'wb') as fhandle: 
       ftp.retrbinary('RETR ' + filename, fhandle.write, 8192) 
      except: 
       self.log.error('i give up !!!') 

예상 : 입력 폴더로 주어진 매일

, 내가 무엇을 얻을 모든 관련 xml 파일

다운로드 :

는 EOFError

무엇 이미 시도 :

  • 내가 유래에 피사체와 일반적으로 인터넷에 대한 모든 가능한 게시물 불구하고 갔다.
  • 나는 시간 폴더의 각 하위 폴더에 대해 연결을 닫으려고했습니다.
  • 문제를 일으키는 특정 파일이 아닌 것 같습니다. 확실히 첫 번째 것이 아닙니다. ftp.retrbinary()으로 파일을 다운로드하는 동안 나는이 EOFError을 얻습니다. 그것은 내가 xmls 파일의 수십만을 다운로드한다는 사실과 관련이있다. 왜냐하면 나는 2000 개의 파일들로 스크립트를 테스트했기 때문에 아무런 예외도 없었지만, 287000 개의 파일들로 인해서 나는 항상 그것을 얻는다. 그리고 내가 이해하지 못하는 것은 스크립트가 159 000 주위 때마다 XML 파일의 같은 양/수를 다운로드하고 그것이 내가

    ftp.retrbinary('RETR ' + filename, fhandle.write,4096)

  • 의 버퍼 크기와 재생하려고 한
  • 항상이다

질문 :

는 내가 뭔가를 놓친 것을 할 수있다? 내 모든 파일을 계속 다운로드하고 내 정신을 잃지 않고이 EOFError를 처리하는 방법.

+0

언제'EOFError'를 얻을 수 있습니까? 이미 첫 번째 파일에? 또는 후속 파일? 어떤 진술에? 우리에게 예외 스택 추적을 보여줍니다. - 귀하의 질문에 명확하지 않습니다. 귀하의 문제는 "수십만 개의 xml 파일 다운로드"*와 얼마나 관련이 있습니까? –

+0

@MartinPrikryl 문제를 일으키는 특정 파일이 아닌 것 같습니다. 확실히 첫 번째는 아닙니다. 'ftp.retrbinary()'로 파일을 다운로드하는 동안이'EOFError'를 얻습니다. 미안 나는 stacktrace에 대해 완전히 잊어 버렸고, 나는 월요일에 게시 할 것이다.그것은 내가 xmls 파일의 수십만을 다운로드한다는 사실과 관련이있다. 왜냐하면 나는 2000 개의 파일들로 스크립트를 테스트했기 때문에 아무런 예외도 없었지만, 287000 개의 파일들로 인해서 나는 항상 그것을 얻는다. 그리고 내가 싫어하는 것은 스크립트가 매번 같은 amoun/xml 파일의 수인 159 000 주위에 몰려 들었고 항상 – sdikby

+0

그 모든 정보가 맨 처음부터 질문에 있었어야한다는 것입니다. 에서 편집하십시오. –

답변

0

마지막으로 내 문제에 대한 해결책을 찾았습니다. 각 하위 폴더에 대한 연결을 여는 대신 이제 다운로드 할 각 파일에 대한 연결을 엽니 다. 그것은 덜 performant지만,이 EOFError 전달해야합니다. 나는 또한 파일을 다운로드하려는 FTP 서버가 병렬 연결 수 또는 연결 기간에 제한이 있음을 알게되었습니다.