단일 서버의 단일 폴더에서 여러 파일을 다운로드해야하므로 더 빨리 수행 할 수있는 방법을 찾고 있습니다. 약간의 읽기 후에는 멀티 스레딩 또는 비동기 접근 방식이 효과가있을 것으로 보이지만 두 접근 방식 모두 작동하지 않는 것처럼 보입니다.단일 FTP 서버에서 다중 스레드/비동기 다운로드
내가 사용하는 비동기 접근 방식은 다음과 같습니다. 이 방법은 오류없이 작동하지만 한 번에 하나의 파일 만 다운로드하므로 속도가 향상되지 않습니다. 속도를 높이기 위해 그것을 수정해야합니까?
async def get_file(self):
async with aioftp.ClientSession(self.host, self.port, self.login, self.password) as client:
async for path, info in client.list(recursive=True):
if info["type"] == "file":
await client.download(path, destination=self.dest_dir,write_into=True, block_size=self.block_size)
def async_update(self):
loop = asyncio.get_event_loop()
loop.run_until_complete(self.get_file())
loop.close()
은 그 때 나는 다음과 같이 멀티 프로세싱의 간단한 풀() FUNC를 사용하여 시도 :
def simple_fetch(self,file)
file = open(self.dest_dir+filename, 'wb')
ftp.retrbinary('RETR ' + filename, file.write, 8192*(2^3)) #, 8192)
file.close()
def multi_fetch(self):
pool = Pool()
pool.map(self.simple_fetch,self.update_files)
pool.close()
pool.join()
을하지만이 오류와 함께 실패합니다. 내가 서버로 돌아 가자 마자 바로 그 오류로 업데이트 할 것이다.
설명해 주셔서 감사합니다. https://docs.python.org/3/library/asyncio-task.html#example-parallel-execution-of-tasks –