This sdk supports PEP 492 async/await functionality when running on python 3.5.3+ and installed with aio extras.
See the relevant installation section for details on how to install the sdk with aio extras.
The SDK will automatically detect if these conditions are met
when imported, and an asyncio compatible dragonchain client can be
created by awaiting
dragonchain_sdk.create_aio_client with the same
Why Use Async/Await?¶
Python Async/Await is important for high performance with workloads that have lots of i/o, as it allows for concurrent code execution.
As communicating over a network is inherantly latent, you can regain performance for other parts of your application by allowing them to execute concurrently within an event loop while the dragonchain_sdk may be waiting on a result from a request to a chain.
For more information on asyncio, async/await, and the python event loop, read the Python Documentation.
Differences between the regular and async client¶
There are only a few notable differences between the regular and async client:
The async client must be created by awaiting
dragonchain_sdk.create_client(although they take identical parameters, so reference create_client for arguments)
Each function on the client must be awaited
When done using the client, its
.closefunction should be awaited in order to clean up any persistent network connections. (This function only exists on async clients)
Other than that, everything else, including function arguments should be identical.
The following is a usage example for the async client: creating the client, making a request to a chain, then closing the client.
import asyncio import dragonchain_sdk async def main(): # Create our client by awaiting the function my_client = await dragonchain_sdk.create_aio_client( dragonchain_id="c2dffKwiGj6AGg4zHkNswgEcyHeQaGr4Cm5SzsFVceVv", auth_key_id="JSDMWFUJDVTC", auth_key="n3hlldsFxFdP2De0yMu6A4MFRh1HGzFvn6rJ0ICZzkE", endpoint="https://35a7371c-a20a-4830-9a59-5d654fcd0a4a.api.dragonchain.com", ) # Ensure to await all our calls on the client result = await my_client.get_status() # Handle the response identically to the regular client if result["ok"]: print("Successful call, here is the response from the chain:") print(result["response"]) else: print("There was the following error making a call to the dragonchain:") print(result["response"]) # Make sure to call .close on the client for cleanup when we're done await my_client.close() if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main())