For asynchronous file saving, I can use aiofiles
library.
To use aiofiles
library I'd have to do something like that:
async with aiofiles.open(path, "wb") as file:
await file.write(data)
How can I asynchronously save the PIL images? Even if I use Image.tobytes
function to save it with file.write(data)
, the saved image isn't correct.
So how can I asynchronously save a PIL image?
Thanks to the comment posted by @MarkSetchell I managed to find the solution.
async def save_image(path: str, image: memoryview) -> None:
async with aiofiles.open(path, "wb") as file:
await file.write(image)
image = Image.open(...)
buffer = BytesIO()
image.save(buffer, format="JPEG")
await save_image('./some/path', buffer.getbuffer())
I don't know how much speed one can gain, but in my case, I'm able to run some data processing code, data downloading code, and image saving code concurrently which gives me a speed up.