私は問題を解決しようとしています。URLが多数(1万程度)あり、それらすべてからコンテンツをダウンロードする必要があります。これまで「forlinkinlinks:」ループでこれを行ってきましたが、時間がかかりすぎています。マルチスレッドまたはマルチプロセッシングのアプローチを実装する時が来たと思います。私の質問は、取るべき最善のアプローチは何ですか?
グローバルインタプリタロックについては知っていますが、私の問題はCPUバウンドではなくネットワークバウンドであるため、それが問題になるとは思いません。各スレッド/プロセスからメインスレッド/プロセスにデータを戻す必要があります。どんなアプローチを実装するのにも助けは必要ありません(いずれかのスレッドがタスクを完了したときに複数のスレッドを終了する)、どのアプローチを取るべきかについてのアドバイスが必要です。私の現在のアプローチ:
data_list = get_data(...)
output = []
for datum in data:
output.append(get_URL_data(datum))
return output
他に共有状態はありません。
最善のアプローチは、すべてのデータを含むキューを作成し、入力キューから複数のワーカースレッドをポップして、URLデータを取得し、出力キューにプッシュすることだと思います。
私は正しいですか?足りないものはありますか?マルチスレッドコードを任意の言語で実装するのはこれが初めてであり、一般的に難しい問題であることを私は知っています。