TODOs
asyncio.to_thread() runs the function in an executor, where the default
executor is a threadpool executor, which invokes loop.run_in_executor() indirectly.
How to set the executor of a loop? Maybe something related to set_default_executor?
If we want to schedule a callback to run in the loop from the C++ code, we can use loop.call_soon_safe() method.