Вообще там aiofiles так и работает под капотом, вроде, когда я смотрел.
Там не настоящая асинхронная работа с файлами. Там используется
run_in_executor, да, но там для нег опередается
None как параметр, дефолт берется самим `
concurrent.futures.ThreadPoolExecutor`. В
доке у тебя там инфа по тому сколько потоков в нем.
Я как-то искал где по-честному работа с файлома асинхронная, но не нашел, поэтому это наверное лучший способ без костыле. Если кто подскажет как честно работать асинхронно с файлами (AIO) — будет круто. Вроде есть
Linux AIO, но я не нашёлся чтобы его пользовали прям где-то.