Hi,
interesting question. I would say that in general the majority of psutil APIs are fast enough and it's OK to call them directly without blocking, meaning you won't have to use asyncio's run_in_executor().
A small set of psutil APIs are more resource intensive than others though. In the github repo there is a script you can use to measure the time of each API call and get a rough idea:
E.g. on my machine (Linux, Intel i7 2.60 GhZ) the slowest process API is Process.memory_maps(), which takes ~0.002 secs per call. I'm not sure if that can be considered "blocking" for asyncio. I guess it depends on the workload, how often you call the "slow API" in a second, how many concurrent clients you're serving, etc.
As a general rule I would say:
1) get a list of all psutil APIs you use in your app
3) figure out if you have "slow APIs" and run those ones (and only those) via asyncio run_in_executor(), else call them directly
Alternatively, what you can do is:
1) get all psutil info in one shot (multiple API calls)
2) do that using asyncio run_in_executor()
Hope this helps.