使用Python实现多线程下载器?
1 个回答
1
由Christopher Arndt开发的Threadpool可能正是你需要的。我用过这个“易于使用的面向对象线程池框架”,正好符合你描述的目的,而且效果很好。你可以在链接页面底部查看使用示例。它真的很简单:只需定义三个函数(其中一个是可选的异常处理器,可以替代默认处理器),你就可以开始了。
来自http://www.chrisarndt.de/projects/threadpool/的特点:
- 面向对象,设计可重用
- 提供回调机制,可以在工作线程返回结果时处理这些结果。
- WorkRequest对象封装了分配给工作线程的任务,并允许轻松传递任意数据给回调函数。
- 使用Queue类可以解决大部分锁定问题。
- 所有工作线程都是守护线程,所以当主程序退出时,它们也会退出,不需要手动加入。
- 线程一创建就开始运行,不需要手动启动或停止。你可以随时增加或减少线程池的大小,多余的线程会在完成当前任务后自动退出。
- 在你给线程分配最后一个任务后,不需要再保留对这个线程的引用。你只需告诉它:“完成后别再回来找工作!”
- 线程在等待分配任务时不会占用CPU资源,它们会在任务队列为空时阻塞(不过每隔几秒会醒来检查一下是否被解散)。
你也可以在http://pypi.python.org/pypi/threadpool上找到它,或者通过easy_install,或者作为一个子版本检出(请查看项目主页)。