Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:提高脚本性能_Python_Image Processing_Python Imaging Library_Gevent - Fatal编程技术网

python:提高脚本性能

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

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

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

最终目标是获取数据集的5个最大图像。

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

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

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'}