Asynchronous programming in Python can be achieved through several libraries and modules such as asyncio, tornado, twisted, etc. The main point behind async programming is to allow expensive IO-bound operations like network requests or disk reads to happen in the background, while the program continues to run other tasks that don’t have to wait for that IO.
Here is a simple example of how to implement async programming via asyncio module in Python.
1. Import the asyncio library:
```
import asyncio
```
1. Define async functions:
```
async def do_something(num):
print(‘Doing something…’)
await asyncio.sleep(num) # This simulates IO-bound operation like network request
return ‘Something done’
async def main():
result = await do_something(3)
print(result)
```
1. Run the async function:
```
await main()
In the example above, the do\_something function is an asynchronous function because it is defined with async def and it uses the keyword await, which signals to Python that this function will give up control and let other tasks run while it’s waiting for the IO to complete.
Please note that asyncio doesn’t work well with blocking operations. If you need to perform heavy computational tasks concurrently, you might want to use threading or multiprocessing instead.
Also, starting from Python 3.7, you can use asyncio.run(main()) to run the main function, which will automatically create an event loop, run the passed coroutine and then close the loop.
Remember that, in Python, await can only be used inside an async def function.