golang で書いた ffmpeg を使ったダウンローダーを goroutines で並行ダウンロードできるようにしてみました。
もともと、ffmpeg のオプションを array に入れて for 文で回していたので、その前に
var wg sync.WaitGroup wg.Add(len(array))
と追記、ダウンロード処理部分は関数化して使っていたのをこんな感じで goroutines にして
go func(ffmpeg_command string) { defer wg.Done() download(ffmpeg_command) }(ffmpeg_command)
最後に
wg.Wait()
を入れただけで、1分台前半から30秒かからないくらいのスピードになりました。*1
超簡単。python だと非同期処理とかよくわからないレベルの僕みたいな初心者でも、golang だと簡単に書ける。
*1:総ダウンロード数が片手で余るくらいなので wg.Add() に len(array) を突っ込んだのですが、サーバーの負荷を考えないといけませんね。