加速しようとしているコードがいくつかあります。私の目標は、約 100 万個のファイルをダウンロードして保存することです。requests ライブラリを使用してコンテンツにアクセスしています。私はこれまで以上に混乱しています。ほとんどの Q/A は、適切な方法は、タスクが I/O バウンドである場合にスレッド化モジュールを使用することであり、サーバーに接続しているため、応答を待ってから応答をディスクに書き込むことであると示唆しています。バウンド。
しかし、私はこのようなものを読みました
1 つのプロセスに複数のスレッドが存在できます。同じプロセスに属するスレッドは、同じメモリ領域を共有します (まったく同じ変数を読み書きでき、互いに干渉する可能性があります)。
私のコードは次のようになります-スレッド化する前に
def create_list(some_ftp_site):
# do some stuff to compare the list to
# the last list and return the difference in the two
return list_to_pull
def download_and save_the_file(some_url):
thestring = requests.get(some_url).content
file_ref = open(something)
fileref.write(the_string)
fileref.close()
if __name__ == '__main__'
files_to_get = create_list(some_ftp_site)
if len(files_to_get) != 0:
for file_to_get in files_to_get:
download_and_save(file_to_get)
どちらかを使用することは、私にとってディープエンドへのジャンプです。したがって、これをマルチスレッド化すると、たとえば、あるファイルの前半が別のファイルの後半に連結されるなど、予期しないことが起こる可能性があるのではないかと心配しています。
このタイプのタスクは、マルチプロセッシングまたはマルチスレッドに適していますか? 明らかに、2 つの異なるファイル部分が同じ変数に書き込まれるため、それらが連結されているかどうかはわかりません。