gpt4 book ai didi

python - 枕头 python : Improve script performance

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:11 28 4
gpt4 key购买 nike

我有一个简单的脚本,它从图像 URL 列表中获取图像大小,但是当列表太大时它会太慢(例如:120 个 URL,运行可能需要 10 秒)

def get_image_size(url):
data = requests.get(url).content
try:
im = Image.open(BytesIO(data))
size = im.size
except:
size = False
return size

list_images = ['https://example.com/img.png', ...]
for img in list_images:
get_image_size(img)

我已经尝试过 Gevent,它可以让我节省 50% 的处理时间,但这还不够。我想知道是否还有其他选项可以让这个脚本运行得更快?

最终目标是获取数据集最大的5张图片。

最佳答案

您可以使用 grequests (请求和 gevent)而不是使用 Pillow 来获取图像大小,您可以从 HTTP header 中识别图像大小:

enter image description here

通常性能取决于网络连接/服务器速度和图像大小:

import grequests


def downloadImages(images):
result = {}
rs = (grequests.get(t) for t in images)
downloads = grequests.map(rs, size=len(images))

for download in downloads:
_status = 200 == download.status_code
_url = download.url

if _status:
for k, v in download.headers.items():
if k.lower() == 'content-length':
result[_url] = v
continue
else:
result[_url] = -1
return result


if __name__ == '__main__':
urls = [
'https://b.tile.openstreetmap.org/12/2075/1409.png',
'https://b.tile.openstreetmap.org/12/2075/1410.png',
'https://b.tile.openstreetmap.org/12/2075/1411.png',
'https://b.tile.openstreetmap.org/12/2075/1412.png'
]

sizes = downloadImages(urls)
pprint.pprint(sizes)

返回:

{'https://b.tile.openstreetmap.org/12/2075/1409.png': '40472',
'https://b.tile.openstreetmap.org/12/2075/1410.png': '38267',
'https://b.tile.openstreetmap.org/12/2075/1411.png': '36338',
'https://b.tile.openstreetmap.org/12/2075/1412.png': '30467'}

关于python - 枕头 python : Improve script performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51571729/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com