位置: IT常识 - 正文

使用多线程让Python应用飞起来(多线程并发python)

编辑:rootadmin

推荐整理分享使用多线程让Python应用飞起来(多线程并发python),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:多线程并发python,python多线程能并行吗,多线程调用,多线程应用场景python,python多线程能提高效率吗,多线程应用场景python,多线程调用,多线程编程python,内容如对您有帮助,希望把文章链接给更多的朋友!

很多时候,我们最终在Python中编写代码来执行远程请求或读取多个文件或对某些数据进行处理。在很多这种情况下,我看到程序员使用一个简单的程序员for loop,需要永远完成执行。例如:

importrequestsfromtimeimporttimeurl_list=["https://via.placeholder.com/400","https://via.placeholder.com/410","https://via.placeholder.com/420","https://via.placeholder.com/430","https://via.placeholder.com/440","https://via.placeholder.com/450","https://via.placeholder.com/460","https://via.placeholder.com/470","https://via.placeholder.com/480","https://via.placeholder.com/490","https://via.placeholder.com/500","https://via.placeholder.com/510","https://via.placeholder.com/520","https://via.placeholder.com/530",]defdownload_file(url):html=requests.get(url,stream=True)returnhtml.status_codestart=time()forurlinurl_list:print(download_file(url))print(f'Timetaken:{time()-start}')

Output:

<--truncated-->Timetaken:4.128157138824463使用多线程让Python应用飞起来(多线程并发python)

这是一个理智的示例,代码将打开每个URL,等待它加载,打印其状态代码,然后转到下一个URL。这种代码非常适合多线程。

现代系统可以运行大量线程,这意味着您可以使用非常低的开销一次完成多个任务。为什么我们不尝试使用它来使上述代码更快地处理这些URL?

我们将利用ThreadPoolExecutor从concurrent.futures库。它非常易于使用。让我向您展示一些代码,然后解释它是如何工作的。

importrequestsfromconcurrent.futuresimportThreadPoolExecutor,as_completedfromtimeimporttimeurl_list=["https://via.placeholder.com/400","https://via.placeholder.com/410","https://via.placeholder.com/420","https://via.placeholder.com/430","https://via.placeholder.com/440","https://via.placeholder.com/450","https://via.placeholder.com/460","https://via.placeholder.com/470","https://via.placeholder.com/480","https://via.placeholder.com/490","https://via.placeholder.com/500","https://via.placeholder.com/510","https://via.placeholder.com/520","https://via.placeholder.com/530",]defdownload_file(url):html=requests.get(url,stream=True)returnhtml.status_codestart=time()processes=[]withThreadPoolExecutor(max_workers=10)asexecutor:forurlinurl_list:processes.append(executor.submit(download_file,url))fortaskinas_completed(processes):print(task.result())print(f'Timetaken:{time()-start}')

Output:

<--truncated-->Timetaken:0.4583399295806885

我们的代码加速了近9倍!我们甚至没有做任何超级参与。如果有更多网址,性能优势会更高。

那么发生了什么?当我们调用时,executor.submit 我们正在向线程池添加新任务。我们将该任务存储在进程列表中。稍后我们迭代过程并打印出结果。

该as_completed方法在完成后立即从进程列表中生成项(任务)。任务可以进入完成状态有两个原因。它已完成执行或已取消。我们也可以传入一个timeout参数as_completed,如果任务花费的时间超过了那个时间段,那么as_completed就会产生这个任务。

本文链接地址:https://www.jiuchutong.com/zhishi/304519.html 转载请保留说明!

上一篇:Discuz主题浏览量实现原理和不更新的解决方案(discuz 首页设置)

下一篇:phpcms会员登录失败(phpcms v9用户手册)

  • 剪切快捷键是(剪切快捷键)(剪切的快捷是什么)

  • 荣耀60se怎么截屏(荣耀50i怎么截屏)

  • 支付宝开通酷喵会员怎么取消自动续费(支付宝开通酷喵自动续费怎么取消)

  • 华为nova7pro如何切换输入法(华为nova7pro如何恢复出厂设置)

  • 华为荣耀20Pro怎么关闭智慧语音(华为荣耀20Pro怎么root)

  • 手机视频发热严重什么原因(手机视频发热严重怎么办)

  • 手机投屏后关掉也能放(手机投屏后关掉手机电视照样播出)

  • 为什么快手界面不一样(为什么快手界面开着手机不锁屏)

  • 手机卡怎么恢复磁性(手机卡怎么恢复联系人号码)

  • 微信群主自己退群了其他人怎么办(微信群主自己退群,群还存在吗)

  • facetime拉黑后表现(facetime拉黑后对方还接的到吗)

  • 苹果手机下载需要验证是怎么回事(苹果手机下载需要密码怎么设置)

  • 微信号违规处罚多长时间(微信违规有啥处罚)

  • 苹果xsmax关机充电不显示(苹果XSMAX关机充电)

  • nova5和nova6区别(华为nova5和华为nova 6有什么区别)

  • vblog是什么(vbbyval什么意思)

  • 苹果se和5s有什么区别(苹果se和5s哪个好)

  • iphone11怎么查看电池损耗情况(iphone11怎么查看照片大小)

  • 南京地铁电子卡出站怎么用(南京地铁电子卡怎么扣钱)

  • word批量调整图片尺寸(word批量调整图片大小)

  • 微信标签怎么删除(微信标签怎么删除里面的人)

  • 怎么清除默认打开方式(如何去除默认打字)

  • 淘宝特别关注怎么设置(淘宝的特别关注店铺在哪里可以找到)

  • 苹果11pro是双卡双待吗?(苹果11pro是双卡还是单卡?)

  • 怎么用话费买东西(如何用话费购买东西)

  • 最右如何注销账号(最右怎么申请取消注销)

  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(搭建开发环境)(vue做项目的流程)

  • 基于SadTalker的AI主播,Stable Diffusion也可用

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络