你需要的是多进程,简单得很,这是我的模板: if __name__=='__main__': from multiprocessing import Pool # 导入进程池 path=choosefolder() p = Pool() # 创建进程池,留空代表 Cpu 的逻辑内核数目 while True: try: for n in range(1,1000): p.apply_async(download, args=(n,path)) # 向进程池中添加任务 except: p.close() # 结束向进程池中添加任务(后续不能再使用 apply_async 方法添加新任务) p.join() # 实现进程同步 break
python 有个著名的 GIL 锁,执行 Python 代码时都需要先获取这个锁,所以虽然多线程,但同一时间只有一个线程获得这个锁,其他线程都在等待,结果只能跑满一个核。如果你是 c 模块处理,可以手动释放锁处理完再获取,这样多线程就能突破单核限制。但 c 模块开发效率和可移植性很差,更好的方案是上面提到的 multiprocessing 多进程。