The latest patch doesn't work also: it hangs on selector.select() call if no network activity but loop._stopped == True I suggest using zero timeout if loop._stopped is set.
I agree that using loop.call_soon(loop.stop) is better but we already have loop.stop() usage. Removing the later sounds good but requires deprecation period IMHO (with raising a warning as GvR suggested).