python创建多线程_初学者看过来:Python中多线程和多处理的指南

使用Python分析数据,如果使用了正确的数据结构和算法,有时可以大量提高程序的速度。实现此目的的一种方法是使用Muiltithreading(多线程)或Multiprocessing(多重处理)。

使用Python分析数据,如果使用了正确的数据结构和算法,有时可以大量提高程序的速度。实现此目的的一种方法是使用Muiltithreading(多线程)或Multiprocessing(多重处理)。

在这篇文章中,我们不会详细讨论多线程或多处理的内部原理。相反,我们举一个例子,编写一个小的Python

脚本从Unsplash下载图像。我们将从一次下载一个图像的版本开始。接下来,我们使用线程来提高执行速度。

1589459435623652.jpeg

Python中多线程和多处理的初学者指南

多线程

简单地说,线程允许您并行地运行程序。花费大量时间等待外部事件的任务通常适合线程化。它们也称为I/O Bound任务例如从文件中读写,网络操作或使用API在线下载。让我们来看一个示例,它展示了使用线程的好处。

1. 没有线程

在本例中,我们希望通过顺序运行程序来查看从Unsplash API下载15张图像需要多长时间:

import requests

import time

img_urls = [

'https://images.unsplash.com/photo-1516117172878-fd2c41f4a759',

'https://images.unsplash.com/photo-1532009324734-20a7a5813719',

'https://images.unsplash.com/photo-1524429656589-6633a470097c',

'https://images.unsplash.com/photo-1530224264768-7ff8c1789d79',

'https://images.unsplash.com/photo-1564135624576-c5c88640f235',

'https://images.unsplash.com/photo-1541698444083-023c97d3f4b6',

'https://images.unsplash.com/photo-1522364723953-452d3431c267',

'https://images.unsplash.com/photo-1513938709626-033611b8cc03',

'https://images.unsplash.com/photo-1507143550189-fed454f93097',

'https://images.unsplash.com/photo-1493976040374-85c8e12f0c0e',

'https://images.unsplash.com/photo-1504198453319-5ce911bafcde',

'https://images.unsplash.com/photo-1530122037265-a5f1f91d3b99',

'https://images.unsplash.com/photo-1516972810927-80185027ca84',

'https://images.unsplash.com/photo-1550439062-609e1531270e',

'https://images.unsplash.com/photo-1549692520-acc6669e2f0c'

]

start = time.perf_counter() #start timer

for img_url in img_urls:

img_name = img_url.split('/')[3] #get image name from url

img_bytes = requests.get(img_url).content

with open(img_name, 'wb') as img_file:

img_file.write(img_bytes) #save image to disk

finish = time.perf_counter() #end timer

print(f"Finished in {round(finish-start,2)} seconds")

#results

Finished in 23.101926751 seconds

一共用时23秒。

2. 多线程

让我们看看Pyhton中的线程模块如何显著地改进我们的程序执行:

import time

from concurrent.futures import ThreadPoolExecutor

def download_images(url):

img_name = img_url.split('/')[3]

img_bytes = requests.get(img_url).content

with open(img_name, 'wb') as img_file:

img_file.write(img_bytes)

print(f"{img_name} was downloaded")

start = time.perf_counter() #start timer

with ThreadPoolExecutor() as executor:

results = executor.map(download_images,img_urls) #this is Similar to map(func, *iterables)

finish = time.perf_counter() #end timer

print(f"Finished in {round(finish-start,2)} seconds")

#results

Finished in 5.544147536 seconds

我们可以看到,与不使用线程代码相比,使用线程代码可以显著提高速度。从23秒到5秒。

对于本例,请注意在创建线程时存在开销,因此将线程用于多个API调用是有意义的,而不仅仅是单个调用。

此外,对于密集的计算,如数据处理,图像处理多处理比线程执行得更好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python求50的阶乘_python中求阶乘

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我如何去计算python中的一个整数的阶乘?...写一个猜数字的游戏,预先设定一个数字&am…

项目部署服务器 jstl,Springboot集成jsp及部署服务器实现原理

1.在application配置文件里面加入配置:spring:mvc:view:prefix: /jsp/suffix: .jsp2.手动在src->main->下面创建webapp文件夹3.在Springboot 启动类加入如下代码:Beanpublic InternalResourceViewResolver setupViewResolver() {InternalResourceV…

c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5

点击“关注”获得更多更新更有趣的足坛资讯!2019年的足坛英雄辈出、岁月激荡。阿贾克斯的青年军两回合力克尤文闯进欧冠四强,梅西梅开二度难救主,巴萨遗憾止步欧冠半决赛,利物浦横扫欧陆,无奈联赛杯赛统统被国内曼城压…

python三维图能画地图_Python地图绘制实操详解

网上有很多地图绘制的教程,更多趋向于全国地图或者省级地图,但有时我们需要到县级。闲得慌,今天以贵州省毕节市为例,分享一篇Python县级地图的绘制(遥想当时差点把百度翻了个底朝天),希望对需要…

ajax juey,锋利的qjuey-ajax

jquery 中的ajaxload方法主要获取web服务器上静态数据1 load方法载入HTML文档load(url [,data] [,callback])$(function(){$("#send").click(function(){$("#resText").load("test.html")})})View Code2 筛选载入的HTML文档$("#resText&quo…

java读取pem格式私钥_openssl生成RSA格式及pkcs1与pkcs8格式互相转换

openssl简介OpenSSL 是一个开源项目,其组成主要包括以下三个组件:openssl:多用途的命令行工具libcrypto:加密算法库libssl:加密模块应用库,实现了ssl及tlsopenssl可以实现:密钥证书管理、对称加…

sql服务器文件夹共享,sqlserver2017共享功能目录路径不可改的解决方法

注意:什么路径不可改就搜索该路径进行删除注册表记录,然后重启电脑按 win键盘R输入 regedit 进去注册表,点击计算机按“编辑”--》查找下一个需要等一些时间结果出来后把搜到的结果的项删除删除之后 按F3继续查找下一个进行删除,…

tt协议号服务器,TTIot: TTIoT云端物联网Iot组件;面向JAVA;netty;mqtt;异步推送;以事件为驱动;为设备提供安全可靠的连接通信能力;...

TTIoT云端物联网组件;面向JAVA;以事件为驱动;为设备提供安全可靠的连接通信能力TTIoT简介TTIOT的Broker采用MQTT协议与设备进行交互,可以应用在数据采集、能源监控、智能生活、智能工业、农业水利等场景;向下提供连接海量设备服务,支撑设备数据采集上云,…

javamail发送html正文文件_Python实现-生成测试报告amp;自动邮件发送

之前单独介绍了生成测试报告和自动发送邮件,那么现在把两者整合到一起;生成测试报告后然后自动发送邮件,这里只是简单的整合实现功能,其实还可以优化的,先用吧,后面再慢慢优化先看下目录,其实目…

byte转换为string乱码_每日一课 | 如何将int转换为String

在Python中&#xff0c;我们可以使用str()将int转换为String。num1 100print(type(num1)) # int> num2 str(num1) print(type(num2)) # str>输出量<class int><class str>参考文献&#xff1a;Python文档– str()Python –如何将String转换为int翻译自: ht…

openssh升级后root_又一root神器停止营业!时至今日你还需要root吗

[PConline杂谈]最近&#xff0c;一条新闻引起了安卓玩家们的注意——360超级root宣布停止运营。在此前&#xff0c;也已经有其他知名root工具和玩家们渐行渐远&#xff0c;例如SuperSu开发者宣布停止开发所有root应用。除了root工具停止开发&#xff0c;root机在用户群中的热度…

dijkstra算法代码_深度好文:改变了我们生活方式最有影响力的5种图算法

作者&#xff1a;Rahul Agarwal编译&#xff1a;刘静图灵联邦编辑部出品本文作者Rahul Agarwal是一位数据科学家&#xff0c;近期&#xff0c;他在Medium上分享了常用的5种图算法的介绍和代码实现。以下是具体博文内容&#xff1a;作为数据科学家&#xff0c;我们已经对Pandas或…

laravel5.6 使用指定字段作为key_MyRocks TTL使用姿势及Bugfix

一些业务场景是经过一段时间后删除过期的数据&#xff0c;MyRocks提供了TTL可以满足该场景。MyRocks 通过Compaction回收过期的数据。本文介绍MyRocks TTL使用姿势以及Bugfix。TTL 通过 table comment 定义&#xff0c;有两种形式&#xff1a;CREATE TABLE t1 (a INT, b INT, c…

mybatis更新时间字段_你以为把Mybatis型处理器了解了,就不会“暴雷”了!

1. 明确需求在设计之初&#xff0c;sys_role表的enabled字段有2个可选值&#xff0c;其中0 代表禁用&#xff0c;1代表启用&#xff0c;而且实体类中我们使用的是Interger类型&#xff1a;/*** 有效标志*/ private Integer enabled;public Integer getEnabled() {return enable…

本地更新github项目_GitHub开源项目2019-03-29更新精选

1.etcd&#xff1a;一个高可用的分布式键值数据库&#xff0c;k8s 全家桶标配的注册与发现服务etcd&#xff1a;一个高可用的分布式键值数据库&#xff0c;k8s 全家桶标配的注册与发现服务。它采用 raft 一致性算法&#xff0c;基于 Go 语言实现。可以通过该项目了解、学习 raf…

maven default aliyun_大家看看大佬对Maven仓库的讲解,有何高明之处?

概念Maven在某个统一的位置存储所有项目的共享的构件&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。(仓库就是存放依赖和插件的地方)。分类maven的仓库只有两大类&#xff1a;1.本地仓库 2.远程仓库&#xff0c;在远程仓库中又分成了3种&#xff1a;中央仓库、 私服…

计算差分方程的收敛点_数值计算(五十九)热传导方程组的差分数值求解

1 问题描述Chenglin Li&#xff1a;数值计算&#xff08;三&#xff09;matlab求解一般的偏微分方程组​zhuanlan.zhihu.com因为给出的边界条件包含导数&#xff0c;因此需要同时考虑前向差分和后向差分&#xff1b;遍历循环&#xff0c;先计算每个坐标的时间节点&#xff0c;或…

python树莓派编程_python树莓派编程

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01;例如&#xff0c;你可以用树莓派搭建你自己的家用云存储服务器。? 树莓派用python来进行编程。 树莓派项目的…

se是什么职位_女皇大学PSE&SE 独家解析!

坐落于圣劳伦斯河畔的女皇大学成立于1841年&#xff0c;至今已经有178年的历史了。作为加拿大传统的四大名校“Old Four”之一&#xff0c;女王大学一直以来在学术成就&#xff08;常年位列麦考林排名医博类前5&#xff09;&#xff0c;学生满意度&#xff08;麦考林排名医博类…