You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In ClientRequest's constructor there is a call to update_auth which in turn calls netrc_from_env. netrc_from_env is blocking as it reads the .netrc file from the FS.
So instanciating ClientRequest in the event loop is blocking the loop.
Caching the result of netrc_from_env (eg with @functools.cache) could be a first step to minimize the impact.
But in that case if the file is modified, it won't be reloaded (unless there is a blocking check of the modification time, which is still not as bad as reading the file).
I don't have numbers for how long it blocks. This file is usually small, so it will probably not block for long and page cache should indeed work pretty well.
I understand the tradeoff between making a breaking change and doing a small optimization.
Maybe the best is to do nothing or just add some runtime cache with an os.stat check (a bit like what is done for linecache).
LMK what you decide.
Describe the bug
In
ClientRequest
's constructor there is a call toupdate_auth
which in turn callsnetrc_from_env
.netrc_from_env
is blocking as it reads the.netrc
file from the FS.So instanciating
ClientRequest
in the event loop is blocking the loop.This was detected by BlockBuster in #10433
To Reproduce
N/A
Expected behavior
I would expect
ClientRequest
to not block the asyncio loop.Logs/tracebacks
Python Version
3.11
aiohttp Version
HEAD
multidict Version
6.1.0
propcache Version
0.2.1
yarl Version
1.18.3
OS
macOS
Related component
Client
Additional context
No response
Code of Conduct
The text was updated successfully, but these errors were encountered: