Мне нужно вычислить хеш изображений, которые я загружаю с сервера CDN. При использовании синхронных библиотек все работает хорошо. Я напрямую передаю результаты запроса (res) в Image.open() и получаю на выходе объект с изображением (img).
запросы на импорт импортировать хэш изображения из изображения импорта PIL # синхронизация защита get_picture(): URL = '
' res = Requests.get(url,stream=True).raw img = Image.open(рез) хеш = imagehash.phash(img, hash_size=6) print(f'хэш: {хеш}') но мне нужно проверять много фотографий и требуется асинхронное выполнение запросов, и тут я столкнулся с проблемой в том, что я не мог напрямую передать объект запроса с изображением в Image.open(), только предварительно сохранение в файл, но мне этот вариант не подходит (файлы на сервере мне не нужны).импортировать хэш изображения из изображения импорта PIL из aiohttp импортировать ClientSession из config.settings импортируйте BASE_DIR # асинхронный асинхронная защита get_aio_picture(): URL = '
' асинхронно с ClientSession() в качестве сеанса: асинхронно с session.get(url=url) в качестве ответа: response.auto_decompress = Ложь с open('picture.jpg', 'wb') как fd: асинхронность для строки в ответе.содержание: fd.write(строка) img = Image.open(f'{BASE_DIR}/picture.jpg') хеш = imagehash.phash(img, hash_size=6) print(f'хэш: {хеш}') асинхронное определение main(): задача = asyncio.create_task(get_aio_picture()) ждать задания защита aio_hash(): asyncio.run(main()) Если я изменю код функции таким образом, чтобы напрямую передать результат в Image.open():async def get_aio_picture(): URL = '
' асинхронно с ClientSession() в качестве сеанса: асинхронно с session.get(url=url) в качестве ответа: response.auto_decompress = Ложь асинхронность для строки в ответе.содержание: img = Image.open(строка) хеш = imagehash.phash(img, hash_size=6) print(f'хэш: {хеш}') Тогда я получаю сообщение об ошибке ... Файл "/home/.../main/services/aio/help.py", строка 37, в get_aio_picture img = Image.open(строка) Файл "/home/.../env/lib/python3.10/site-packages/PIL/Image.py", строка 3247, открыт fp =builtins.open(имя файла, "rb") ValueError: встроенный нулевой байт Как изменить код, чтобы не создавать файлы на диске? Помогите мне, пожалуйста!