python gpu加速库比matlab快吗_为什么异步库比此I/O绑定操作的线程慢?
首先,我无法重现与您在我的Linux机器上看到的几乎一样大的性能差异。我一直看到线程版本大约20-25秒,而asyncio版本大约24-34秒。
现在,为什么asyncio要慢?这其中有一些原因。首先,asyncio版本必须按顺序打印,但线程版本不按顺序打印。打印是I/O,因此GIL可以在发生时释放。这意味着可能有两个或多个线程可以同时打印,尽管在实践中这种情况可能不会经常发生,而且可能不会对性能产生太大的影响。
其次,更重要的是,getaddrinfo的asyncio版本实际上是just calling ^{} in a ^{}:def getaddrinfo(self, host, port, *,
family=0, type=0, proto=0, flags=0):
if self._debug:
return self.run_in_executor(None, self._getaddrinfo_debug,
host, port, family, type, proto, flags)
else:
return self.run_in_executor(None, socket.getaddrinfo,
host, port, family, type, proto, flags)
它使用默认的ThreadPoolExecutor作为这个,which only has five threads:# Argument for default thread pool executor creation.
_MAX_WORKERS = 5
对于这个用例,这几乎不是您想要的那么多并行性。要使其行为更像threading版本,您需要对1000个线程使用ThreadPoolExecutor,方法是通过loop.set_default_executor将其设置为默认执行器:loop = asyncio.get_event_loop()
loop.set_default_executor(ThreadPoolExecutor(1000))
coroutines = asyncio.wait([getaddr(loop, i+site) for i in create_host(char)])
loop.run_until_complete(coroutines)
现在,这将使行为更等价于threading,但这里的实际情况是您实际上没有使用异步I/O—您只是将threading与不同的API结合使用。因此,您在这里所能做的最好的事情就是与threading示例的性能相同。
最后,您并没有在每个示例中真正运行等效代码,threading版本使用一个工作池,它共享一个queue.Queue,而asyncio版本则为url列表中的每个项生成一个协程。如果我将asyncio版本设置为使用asyncio.Queue和协程池,除了删除print语句和设置更大的默认执行器之外,这两个版本的性能基本相同。这是新的asyncio代码:import asyncio
import string
import time
from concurrent.futures import ThreadPoolExecutor
start = time.time()
def create_host(char):
for i in char:
yield i
for i in create_host(char):
if len(i)>1:
return False
for c in char:
yield c + i
char = string.digits + string.ascii_lowercase
site = '.google.com'
@asyncio.coroutine
def getaddr(loop, q):
while True:
url = yield from q.get()
if not url:
break
try:
res = yield from loop.getaddrinfo(url,80)
except:
pass
@asyncio.coroutine
def load_q(loop, q):
for host in create_host(char):
yield from q.put(host+site)
for _ in range(NUM):
yield from q.put(None)
NUM = 1000
q = asyncio.Queue()
loop = asyncio.get_event_loop()
loop.set_default_executor(ThreadPoolExecutor(NUM))
coros = [asyncio.async(getaddr(loop, q)) for i in range(NUM)]
loop.run_until_complete(load_q(loop, q))
loop.run_until_complete(asyncio.wait(coros))
end = time.time()
print(end-start)
以及每种产品的产量:dan@dandesk:~$ python3 threaded_example.py
20.409344911575317
dan@dandesk:~$ python3 asyncio_example.py
20.39924192428589
不过,请注意,由于网络的原因,有些变化。他们两个有时都会比这慢几秒。
python gpu加速库比matlab快吗_为什么异步库比此I/O绑定操作的线程慢?相关推荐
- python gpu加速库比matlab快吗_python – 为什么asyncio库比这个I / O绑定操作的线程慢?...
首先,我无法重现与我在Linux机器上看到的性能差异几乎一样大的性能差异.对于线程版本,我一直看到大约20-25秒,对于asyncio版本在24-34秒之间. 现在为什么asyncio慢了?有一些事情 ...
- python gpu加速库比matlab快吗_Python之Unittest和Requests库详解
1.按类来执行 import unittest class f1(unittest.TestCase): def setUp(self): pass def tearDown(self): pass ...
- Python GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- python gpu加速 显卡_PyTorch-GPU加速实例
硬件:NVIDIA-GTX1080 软件:Windows7.python3.6.5.pytorch-gpu-0.4.1 一.基础知识 将数据和网络都推到GPU,接上.cuda() 二.代码展示 imp ...
- opencv python gpu加速_在Windows上使用OpenCV和Python进行硬件加速解码(MSMT/IntelMFX/FFMPEG/any-backend)...
我无法在Windows10上使用OpenCV进行硬件加速解码. 有什么提示吗?我已经在最新的opencv4.1.0forwindows中编译并尝试了所有的后端. 我对MSMF解码最有信心,因为它支持D ...
- python gpu加速 显卡_使用Python玩转GPU
问题 随着机器学习对模型运算速度的需求越来越强烈, 一直想进行GPU编程,但一直以来这些都是c++的专利 一想到c++里的各种坑,就提不起劲来,毕竟这样来来回回填坑的投入产出,生产效率就会大打折扣 解 ...
- python gpu加速 显卡_AMD的GPU现在可以加速TensorFlow深度学习了
近日,AMD 宣布推出适用于 ROCm GPU 的 TensorFlow v1.8 接口,其中包括 Radeon Instinct MI25.AMD 称,这是该公司在实现深度学习加速上的重要里程碑.R ...
- opencv python gpu加速_OpenCV中配置CUDA,实现GPU加速
1. 查看本机配置,查看显卡类型是否支持NVIDIA GPU,本机显卡为NVIDIA GeForce GT630: 3. 从https://developer.nvidia.com/cuda-too ...
- python绘制红色五角星、边长100像素_使用turtle库绘制一个五角星
如何采用Python语言绘制一个五角星 #./usr/bin/env python import turtle import time turtle.forward(100) turtle.right ...
最新文章
- 大公司为什么还在采用过时的技术
- python中webdriver_浅谈python中selenium库调动webdriver驱动浏览器的实现原理
- 计算机科学速成视频35,计算机科学速成课30:万维网【视频】
- 兰华峰:商业模式驱动企业参与MSU评测
- 【.NET Core 3.0】 46 ║ 授权认证:自定义返回格式
- java final 修改_“无法改变的设计”——浅谈Java中的final关键字
- [机器学习笔记]Note10--支持向量机(SVM)
- 阿里巴巴大数据实践—实时技术
- Linux调试时常见问题,C程序在linux下调试时经常出现的问题
- Java 反射机制之 Class
- 百度下拉词推广是什么?
- IT也要健康:帮助你保持健康的几个重要因素
- python pcl_windows 10 环境pcl-python 安装
- 机器学习中的算法——决策树模型组合之随机森林与GBDT
- Java的三种技术架构是什么?
- IDEA格式化js代码
- 2010 年全国大学生数学建模竞赛甘肃赛区 获奖情况
- CIO40知识星球—5年工程师升职IT主管(22-27岁)
- 漫步数理统计二十三——泊松分布
- Unity3D接入Android第三方SDK流程
热门文章
- mysql数据类型符号位_MySQL数据类型
- c++排查线程hang住_Kafka学习笔记之kafka高版本Client连接0.9Server引发的血案排查 - 时光飞逝,逝者如斯...
- 设置串行端口的通信参数
- 防Xss攻击,包含富文本编辑器的处理
- Ajax——从服务器获取各种文件
- 再读UNPv1:复习、实践、小结
- (转)C#开发微信门户及应用(4)--关注用户列表及详细信息管理
- swift-初探webView与JS交互
- Jrebel6.3.3破解,配置图文教程
- JAVA escape/unescape