本篇内容主要讲解"蟒蛇中多线程和多处理的分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"蟒蛇中多线程和多处理的分析"吧!
多线程
简单地说,线程允许您并行地运行程序。花费大量时间等待外部事件的任务通常适合线程化。它们也称为输入/输出绑定任务例如从文件中读写,网络操作或使用应用程序接口在线下载。让我们来看一个示例,它展示了使用线程的好处。
1. 没有线程
在本例中,我们希望通过顺序运行程序来查看从美国石油学会下载15张图像需要多长时间:
导入requestsimporttimeimg _ URL=[' https://]个图像。unsplash。com/photo-1516117172878-fd2c 41 F4 a 759 ',' https://图片。unsplash。com/photo-1532009324734-20 a7a 5813719 ',' https://图片。unsplash。com/photo-152444444444444669-6633 content not open(img _ name,' WB ')asimg _ file : img _ file。write(img _ bytes)# savegimagetodiskffinish=time。perf _ counter()# endtimer print(f '完成于{ round(finish-start,2)}秒)' #结果完成于23.1019267551秒一共用时23秒。
2. 多线程
让我们看看派顿中的线程模块如何显著地改进我们的程序执行:
从并发导入时间。futureimportthreadpooleexecutudefdownload _ images(URL): img _ name=img _ URL。split('/')[3]img _ bytes=请求。获取(img _ URL).contentwithopen(img_name,' WB ')asimg _ file : img _ file。write(img _ bytes)print(f ' { img _ name }被下载')start=time。perf _ counter()# starttimerwithThreadPoolExecutor :结果=executor。map(download _ images,img _ URL)# thissimilartmap(func,* iterables)finish=time。perf _ counter()# endtimerprint(f ' finished in { round(finish我们可以看到,与不使用线程代码相比,使用线程代码可以显著提高速度。从23秒到5秒。
对于本例,请注意在创建线程时存在开销,因此将线程用于多个应用程序接口调用是有意义的,而不仅仅是单个调用。
此外,对于密集的计算,如数据处理,图像处理多处理比线程执行得更好。
到此,相信大家对"蟒蛇中多线程和多处理的分析"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/66409.html