栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Python和线程下载文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Python和线程下载文件

您可以使用锁&c协调工作,但我建议改用Queue-通常是在Python中协调多线程(和多处理)的最佳方法。

我会让主线程生成您认为合适的尽可能多的工作线程(您可能希望通过实验来在性能之间进行校准,并在远程服务器上进行加载);每个工作线程都在同一个全局

Queue.Queue
实例上等待,
workQ
例如,为“工作请求”调用它(
wr= workQ.get()
将正确执行-每个工作请求都是由单个工作线程获得的,不必大惊小怪。

在这种情况下,“工作请求”可以简单地是一个三元组(包含三项的元组):远程文件的标识(URL或其他内容),从中获取数据所需的偏移量,从中获取字节数(请注意,这对于获取一个或多个文件同样有效)。

主线程将所有工作请求推送到

workQ
(仅
workQ.put((url, from,numbytes))
针对每个请求),并等待结果到达另一个
Queue
实例,然后调用它
resultQ
(每个结果也将是一个三元组:文件标识符,起始偏移量,该文件在该偏移处的结果)。

当每个工作线程都满足其正在执行的请求时,它将结果放入

resultQ
并返回以获取另一个工作请求(或等待一个)。同时,主线程(或如果需要单独的专用“编写线程”
-也就是说,如果主线程还有其他工作要做,例如在GUI)从得到的结果
resultQ
和执行的需要
open
seek
以及
write
运营放置在数据正确的地方。

终止操作有几种方法:例如,一个特殊的工作请求可能会要求接收该操作的线程终止—

workQ
在所有实际的工作请求之后,主线程所穿的线程与工作线程一样多,然后在接收和写入所有数据后加入所有工作线程(存在许多替代方法,例如直接加入队列,具有工作线程守护程序,以便它们在主线程终止时消失)等等。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号