What's the best way to get the top n engine moves? I want to use python-chess to get the top 5 Stockfish moves from a given position with a numerical evaluation for each move. Is it more accurate to run the engine for 10 minutes with MultiPV=5, or to quickly rank all the legal moves (with maybe 1-2 seconds engine time each) and then let the engine think about the top 5 or so one at a time for 2 minutes?
Both approaches will work.

In the second approach, you will have better accuracy of your evaluations but you may miss an important move. For example, if 20...Rxc3 positional exchange sacrifice is a strong move, you will probably miss it with a 1-2s quick engine search.
In the first approach, you will lose accuracy but you won't miss a strong hidden resource like in the second approach.

Classical example of sensitivity vs false positives. The second approach is more sensitive but you trade it with higher false positive rate.
In Chessable engine analysis, I adopted the second approach. I gave about 10s for each legal move (there could be many!). Filter out only the top moves, then seek evaluation for each individual move. 1-2s is too little.
PS: MultiPV is causing lose in accuracy because the engine has to evaluate the moves before those moves are played on the board.