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,一经查实,立即删除!

相关文章

css如何实现一个小三角形,用纯css写一个常见的小三角形

js小技巧js判断字符长度 直接使用String对象的属性,空格亦算一个字符 myString "Hello world"; length myString.length js比较字 ...c#接口容易被忽视的问题今天在看"并发集合"的时候,接口IProducerConsumerCollection 有一个方法是TryAdd(),表…

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继续查找下一个进行删除,…

python语义分析_Python差异的潜在语义分析

我正在尝试使用以下代码在 Python中遵循 Wikipedia Article on latent semantic indexing: documentTermMatrix array([[ 0.,1.,0.,1.],[ 0.,0.],[ 1.,0.]]) u,s,vt linalg.svd(documentTermMatrix,full_matricesFalse) sigma diag(s) ## remove extra dimension…

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

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

python圆面积函数_Python基础函数必学

S πr2 当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积: r1 12.34 r2 9.08 r3 73.1 s1 3.14 * r1 * r1 s2 3.14 * r2 * r2 s3 3.14 * r3 * r3 当代码出现有规律的重复的时候,你就需要当心了…

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

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

笨方法学python3怎么样_有个很笨的女朋友,是怎么样的体验?

我是妹子 ,但是我并不觉笨是可爱. 反而觉得自己是累赘。 为什么别人可以思考过来的东西, 我却需要很费劲? 为什么 ?我的逻辑思维能力很差? 我没有感觉到自己是可爱 ,甚至感到自卑。 一提到学习,…

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机在用户群中的热度…

MyBatis中or和and的使用问题

在使用or和and混合使用时&#xff0c;name成立并且想要age和bj其中一个成立就显示&#xff0c;这样写&#xff1a; QueryWrapper userWrapper new QueryWrapper(); userWrapper.eq(“name”, name); userWrapper.eq(“age”, age).or().eq(“bj”, bj); 出来的sql语句&#…

python设置excel的格式_python使用xlrd与xlwt对excel的读写和格式设定

前言 python操作excel主要用到xlrd和xlwt这两个库&#xff0c;即xlrd是读excel&#xff0c;xlwt是写excel的库。本文主要介绍了python使用xlrd与xlwt对excel的读写和格式设定&#xff0c;下面话不多说&#xff0c;来看看详细的实现过程。 脚本里先注明# -*- coding:utf-8 -*- 1…

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

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

使用equals判断对象是否相等出现的错误

我在使用中 if(a.equals(b)&&a!null) 这样使用如果a是null&#xff0c;a.equals&#xff0c;抛出NullPointException异常&#xff0c;不会进行下一步 应该这样写 if(a!nuull&&a.equals(b)) 先保证a不等于null&#xff0c;再用a.equals&#xff0c;来判断他…