首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python库性能

Python库性能
EN

Stack Overflow用户
提问于 2011-03-26 19:51:46
回答 2查看 2.2K关注 0票数 2

我遇到的问题是,我有一个Python脚本,每次执行它时都会对数千个图像进行编码,而且它没有占用大部分内存和CPU。

如何提高性能,避免I/O开销?

脚本每次执行时生成5000个缩略图,我想知道是否可以将图像存储在内存中,然后将它们“冲洗”到硬盘上,以提高性能。

你有什么建议来提高我剧本的效果吗?

循环中的代码片段:

代码语言:javascript
复制
im = Image.open(StringIO.StringIO(urllib.urlopen(imagen_url).read()))
im.thumbnail((100, 50), Image.ANTIALIAS)

if im.mode != "RGB":
    im = im.convert("RGB")

im.save(dir + (imagen % coche_id), "JPEG")

大部分时间用于urlopen(),但我认为im.save可以改进。

我仍然从Python开始,我认为您可以帮助我改进我的代码。

非常感谢!

pd:对不起,如果我的英语不太好的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-26 21:11:15

您可以通过并发运行几个线程来利用一些i/o并发。这可能在两方面有所帮助:

  • More TCP connections ==更快(虽然做一个好的互联网公民有时也很重要)。
  • 你现在拥有的程序首先将远程url读入内存,然后处理它,然后保存到磁盘中。CPU没有得到充分利用,因为有些时候您正在等待数据被接收。在此期间,您不需要进行处理。

在这种情况下,GIL不是一个问题,因为它是在i/o操作期间发布的。

如果您希望立即阻止将文件写入磁盘,一种方法可能是关闭当前正在写入的设备上的fsync。

票数 2
EN

Stack Overflow用户

发布于 2011-03-26 19:55:13

大部分时间用于urlopen(),但我认为im.save可以改进。

这是因为urlopen (或者更确切地说是read)位在网络上执行IO,这将取决于可用的带宽和服务器的带宽而变慢。

所以是的,如果你想在网上下载5000张图片的话,你没什么可以加快速度的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5444892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档