bugfix> python > 投稿

asyncioを使用して、一連の画像のサイズを取得します。

一連のURLを渡し、3つの値 (x, y, channel) を取得することを望みます 。

しかし、何も得られません。

私のコードに何か問題はありますか?

from PIL import Image
from io import BytesIO
import numpy as np
import asyncio
import concurrent.futures
import requests
def get_image_shape(path):
    try:
        img = Image.open(BytesIO(requests.get(path).content))
        arr = np.array(img, dtype = np.uint8)
        return arr.shape
    except:
        return (0,0,0)
async def main(url_list):
    loop = asyncio.get_event_loop()
    futures = [
        loop.run_in_executor(
            None, 
            get_image_shape, 
            url
        )
        for url in url_list]
    for response in await asyncio.gather(*futures):
        pass
loop = asyncio.get_event_loop()
loop.run_until_complete(main(url_list))
#response.result()
#[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)]

回答 1 件
  • これを試して:

    from PIL import Image
    from io import BytesIO
    import numpy as np
    import asyncio
    import concurrent.futures
    import requests
    def get_image_shape(path):
        try:
            img = Image.open(BytesIO(requests.get(path).content))
            arr = np.array(img, dtype = np.uint8)
            return arr.shape
        except:
            return (0,0,0)
    async def main(url_list):
        loop = asyncio.get_event_loop()
        futures = [
            loop.run_in_executor(
                None, 
                get_image_shape, 
                url
            )
            for url in url_list]
        return [response for response in await asyncio.gather(*futures)]
    loop = asyncio.get_event_loop()
    response = loop.run_until_complete(main(url_list))
    
    

あなたの答え