How do you handle asynchronous programming in Python? Compare asyncio with multi-threading and multi-processing.