No. That would either
- True async IO with callbacks: impose unexpected restrictions; good on Windows and FreeBSD though
- Non-blocking IO: disable filesystem cache (at least on Linux and FreeBSD) and still not guarantee that file IO would not block (at least on Linux on commonly used file systems)
- Thread pool: incur unexpected performance and memory costs
Thread pool is the easiest, most portable and most predictable way though. You could easily wrap your calls with eventlet.tpool.execute
.