多线程下载

为了平衡每个线程的作业量，最好是传给线程的id都是需要去请求页面并下载的，
已经下载了的文件应该在外部过滤掉。
偶尔下载失败的问题应该出在download_file的那个请求上，
应该分析一下这个请求返回的东西看看能不能避免这个问题。