【Python】单线程异步多线程多进程实例

上一篇文章主要介绍了多任务场景下单线程异步、多线程、多进程如何选择,链接:多任务场景下单线程异步多线程多进程
这里主要通过三个实例去验证一下简单的多任务场景下,三种方式的耗时情况,假设有10个互不关联的10个任务

'''''''''
多进程版本:
使用多进程,时间比多线程更慢,为什么?因为创建进程的成本是要比线程高的,
虽然,它可以利用多核CPU的优势,但是在这里,用不上,就好比杀鸡用牛刀一样,大材小用,还提高了成本。
'''''''''import time
import multiprocessingfrom logger import Logger
logger = Logger("multiProcess").get_log()def processTask(t):logger.info("任务开始:%s", t)time.sleep(1)logger.info('任务耗时1秒钟')if __name__=='__main__':t3 = time.time()processes = [multiprocessing.Process(target = processTask, args=(t,)) for t in range(0, 10)]for p in processes:p.start()for p in processes:p.join()logger.info("总共耗时:%s ", time.time() - t3)

总共耗时:1.9219999313354492,运行截图:

'''''''''
多线程版本:
5个线程各负责一个任务,全部完成最后只花了1秒多一点时间,所以,对于阻塞性任务,例如IO密集型任务,
即使有GIL,还是能发挥多线程的作用的,毕竟,时间花在IO等待上,如果是CPU密集型任务效果不大。
'''''''''import time
import threadingfrom logger import Logger
logger = Logger("multiThread").get_log()def  multiTask(t):logger.info("任务开始:%s", t)time.sleep(1)logger.info('任务耗时1秒钟')def main():threads = [threading.Thread(target = multiTask,args=(t,)) for t in range(0,10)]for t in threads:t.start()for t in threads:t.join()if __name__ == '__main__':t1 = time.time()main()logger.info("总共耗时:%s ",time.time()-t1)

总共耗时:1.003000020980835,运行截图:

'''''''''
单线程异步模型:
发现使用asyncio所的时间与多线程几乎一致。尽管它是单线程,但因为它没有多线程和进程的创建成本,
就是在单线程环境下,切换任务,当这个任务被阻塞时,立刻切换其他任务,当前面的任务完成时,在通知它。
'''''''''import asyncio
import timefrom logger import Logger
logger = Logger("asyncSingleThread").get_log()async def singleTask(t):logger.info("任务开始:%s",t)await asyncio.sleep(1)logger.info('任务耗时1秒钟')async def main(loop):tasks = [loop.create_task(singleTask(t)) for t in range(0, 10)]await asyncio.wait(tasks)t4 = time.time()
loop = asyncio.get_event_loop()  # 建立 loop
loop.run_until_complete(main(loop))  # 执行 loop
loop.close()  # 关闭 loop
logger.info("总共耗时:%s ", time.time() - t4)

总共耗时:1.0079998970031738 ,运行截图:

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

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

相关文章

python及pycharm2018软件安装教程

python及pycharm2018软件安装教程 python 3.6.5及pycharm2018.1.1 Win版32/64位下载地址: https://pan.baidu.com/s/1KdECgnrARK4HubPeFSKCTw 密码:bwc5 Python及PyCharm简介: Python 是一种面向对象的解释型计算机程序设计语言。是纯粹的自由…

【Python爬虫】requests与urllib库的区别

我们在使用python爬虫时,需要模拟发起网络请求,主要用到的库有requests库和python内置的urllib库,一般建议使用requests,它是对urllib的再次封装,它们使用的主要区别: requests可以直接构建常用的get和post…

2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决

使用navicat 连接 mysql 8.0.11 报 "2059 - authentication plugin caching_sha2_password ..." 解决办法: 进入mysql命令行然后输入 ALTER USER root% IDENTIFIED WITH mysql_native_password BY root1;

【教育】世界上最伟大的25个教育法则

鱼缸法则 心灵的成长需要自由 一家公司里,职员把几条小鱼放在一个鱼缸里,好几年了,鱼竟然还是那么小,于是大家都认为这鱼就是小个头。一天鱼缸被打破了,就把它们养在院子塘里,没想这些鱼疯了似地长得很大…

mysql安装版安装

1、到mysql官网。选择windows,选择.msi文件。下载 2、双击安装。安装时选择server即可ok。 3、在输入密码时,切记勿用小键盘上的数字(可能会造成后期连接数据库密码错误) 4、安装完成后,打开sql命令行。输入密码校正…

【测试工具】在linux测试环境安装bug管理工具禅道

在我们测试中,为了方便管理测试流程,提交测试发现的bug,我们需要使用到bug管理工具。有些大公司可能会自己开发一些bug管理工具,但是我们也会用一些开源的bug管理工具,比如Bugzilla,Redmine,Tra…

PyCharm点击设置没反应,无法进行设置

首先检查下是不是装了中文汉化包resources_cn.jar 如果有的话,解决办法:1.更换一个汉化包或者将原来的resources_en.jar也放进lib目录下 2.将汉化包都删除,只留下原版的resources_en.jar 转载自https://blog.csdn.net/xiangshangbashaon…

【测试工具】在linux测试环境访问禅道数据库

上一篇文章我们介绍了如何在linux测试环境安装bug管理工具禅道,现在我们来介绍一下如何访问禅道的数据库,访问数据库有什么用呢?首先,我们可以更改我们安装后的管理系统的名称(改为自己公司名称)&#xff0…

在命令提示符(cmd)下怎样复制粘贴(详细版)

我们的命令提示符面板,不能选中复制。应该怎么办呢? 按照下面的方法即可解决 输入“cmd”,确认。 此时打开了cmd窗口,在图中位置右键选择“属性”。 4 在弹出的窗口中,勾选“快速编辑模式”。 5 复制方框1中的文字…

【Python】提升Python程序性能的好习惯2

掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费。 追求性能极限是一个有趣的游戏, 而过度优化就会变成嘲弄了。虽然Python授予你与C接口无缝集成的能力, 你必须问自己你花数小时的艰辛优化工作用户是否买帐. 另一方面, 牺牲代码的可…

python各种库安装

1、安装django pip install django 安装成功测试:进入cmd--》输入python--》输入import django-->输入 django.get_version(),若正常显示则说明安装成功 2、更新pip python -m pip install --upgrade pip 3、安装pymysql pip install pymysql 出现错误&…

【工具】SecureCRT安装和注册

SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。 SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过…

Windows下如何查看某个端口被谁占用并强制关闭

一、查看那个端口被调用 我告诉大家一个方法,^_^。 1、 开始—->运行—->cmd,或者是windowR组合键,调出命令窗口; 2、输入命令:netstat -ano,列出所有端口的情况。在列表中我们观察被占用的端口&a…

【Python】random模块生成多种类型随机数

开发和测试过程中我们经常遇到需要随机数的场景,比如为了用户密码更安全我们有时会加入随机码,也就是将用户原密码连接上一串随机字符然后加密保存,又比如我们可能需要随机展示某张图片等等。这篇文章主要介绍了各种生成随机数的方法&#xf…

python grpc入门

准备 1.升级pip $ python -m pip install --upgrade pip 2.安装grpc $ python -m pip install grpcio 3.安装grpc tools $ python -m pip install grpcio-tools 4.下载example $ # Clone the repository to get the example code: $ git clone https://github.com/grpc…

【债券】可转换债券基本概念

可转换债券是可转换公司债券的简称,又简称可转债,是一种可以在特定时间、按特定条件转换为普通股票的特殊企业债券。可转换债券兼具债权和期权的特征。 可转债重要概念 正股价格:债券对应的股票的交易价格;转股价:以…

grpc例子

什么是RPC RPC(Remote Procedure Call Protocol)-- 远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络协议的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序…

【股票】融资融券基本概念

融资融券交易(securities margin trading)又称“证券信用交易”或保证金交易,2008年4月23日国务院颁布的《证券公司监督管理条例》对融资融券做了如下定义:融资融券业务,是指在证券交易所或者国务院批准的其他证券交易场所进行的证券交易中&a…

python 字符串中特定字符替换,截取

特定字符串替换 t2018-08-07 t1t.replace(-,) print(t1) #输出为20180807 字符串截取与拼接 pathE:/项目/Djangocode/RSMDSys/static/imagedata/1535974092.287188.jpg path1path.split(/) print(path1:,path1) path2path.split(/,4) print(path2:,path2) print(type(path2…

【性能测试】性能测试的基础理论

转发自博客园贺满:https://www.cnblogs.com/puresoul/p/5456855.html ,有删减。 随着软件行业的快速发展,现代的软件系统越来越复杂,功能越来越多,测试人员除了需要保证基本的功能测试质量,性能也随越来越受…