単一のサーバー内の単一のフォルダから多数のファイルをダウンロードする必要があるため、より迅速に行う方法を探しています。少し読んだら、マルチスレッドまたは非同期のどちらの方法でもうまくいくように思えますが、いずれのアプローチも動作しないようです。単一のFTPサーバーからのマルチスレッド/非同期ダウンロード
私が使用している非同期の方法は以下のとおりです。これは動作します。つまり、エラーは発生しませんが、一度に1つのファイルしかダウンロードされないため、スピードは向上しません。速度を改善するためにそれを修正するために離れていますか?
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 –