我遇到的问题是我有一个Python脚本,每次执行它时都会对大约数千个图像进行编码,并且它不会占用大部分内存和CPU。
如何改善性能以避免I / O开销?
该脚本每次执行时都会生成5000个缩略图,我想知道是否可以将图像存储在内存中,然后将它们“刷新”到硬盘上以提高性能。
你有什么建议来提高我的剧本的性能吗?
循环内的代码片段:
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:对不起,如果我的英语不是应该的那么好。
答案 0 :(得分:2)
您可以通过并发运行多个线程来利用一些i / o并发性。这可能有两个方面的帮助:
在这种情况下,GIL不是问题,因为它在i / o操作期间被释放。
如果你想阻止文件立即写入磁盘,一种方法可能是关闭当前正在写入的设备上的fsync。
答案 1 :(得分:0)
大部分时间花在了urlopen()上,但我认为im.save可以改进。
这是因为urlopen
(或更确切地说是read
)位通过网络执行IO,这将会很慢,具体取决于可用的带宽和服务器。
所以,如果你想通过网络下载5000张图片,你可以做很多事情来加快速度。