使用Python实现多线程下载器?

0 投票
1 回答
2057 浏览
提问于 2025-04-15 17:28

我在网上看到了一些多线程的下载工具,还有一些分段下载工具(HTTP)。

不过,我还没见过把这两者结合在一起的类或函数。

如果你们有现成的类或函数,可以直接放到我需要下载多个文件的应用里,那我会非常感激。

如果有哪个库、框架(或者程序的后端)可以做到这一点,请告诉我一下?

1 个回答

1

由Christopher Arndt开发的Threadpool可能正是你需要的。我用过这个“易于使用的面向对象线程池框架”,正好符合你描述的目的,而且效果很好。你可以在链接页面底部查看使用示例。它真的很简单:只需定义三个函数(其中一个是可选的异常处理器,可以替代默认处理器),你就可以开始了。

来自http://www.chrisarndt.de/projects/threadpool/的特点:

  • 面向对象,设计可重用
  • 提供回调机制,可以在工作线程返回结果时处理这些结果。
  • WorkRequest对象封装了分配给工作线程的任务,并允许轻松传递任意数据给回调函数。
  • 使用Queue类可以解决大部分锁定问题。
  • 所有工作线程都是守护线程,所以当主程序退出时,它们也会退出,不需要手动加入。
  • 线程一创建就开始运行,不需要手动启动或停止。你可以随时增加或减少线程池的大小,多余的线程会在完成当前任务后自动退出。
  • 在你给线程分配最后一个任务后,不需要再保留对这个线程的引用。你只需告诉它:“完成后别再回来找工作!”
  • 线程在等待分配任务时不会占用CPU资源,它们会在任务队列为空时阻塞(不过每隔几秒会醒来检查一下是否被解散)。

你也可以在http://pypi.python.org/pypi/threadpool上找到它,或者通过easy_install,或者作为一个子版本检出(请查看项目主页)。

撰写回答