python:提高脚本性能
我有一个简单的脚本,可以从图像URL列表中获取图像大小,但当列表太大时,它的速度太慢(例如:120个URL,运行可能需要10秒) 我已经试过Gevent,它可以让我节省50%的处理时间,但这还不够。我想知道是否有其他选项可以让这个脚本运行得更快 最终目标是获取数据集的5个最大图像。您可以使用(请求和gevent),而不是使用枕头获取图像大小,您可以从HTTP头中识别图像大小: 通常,性能取决于网络连接/服务器速度和映像大小:python:提高脚本性能,python,image-processing,python-imaging-library,gevent,Python,Image Processing,Python Imaging Library,Gevent,我有一个简单的脚本,可以从图像URL列表中获取图像大小,但当列表太大时,它的速度太慢(例如:120个URL,运行可能需要10秒) 我已经试过Gevent,它可以让我节省50%的处理时间,但这还不够。我想知道是否有其他选项可以让这个脚本运行得更快 最终目标是获取数据集的5个最大图像。您可以使用(请求和gevent),而不是使用枕头获取图像大小,您可以从HTTP头中识别图像大小: 通常,性能取决于网络连接/服务器速度和映像大小: import grequests def downloadIma
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'}
使用
joblib
进行多线程处理并并行执行一系列操作。请记住,通过HTTP远程访问对象的延迟很高—可能需要1s来启动传输,100ms的传输时间。如果您连续发生所有这些1s延迟,它们将与许多文件一起构成一个长延迟,如果您并行执行所有挂起操作,那么延迟将通过重叠相互掩盖。谢谢!我要试试这个
{'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'}