Async Usage¶
If you use an async transport, you can use GQL asynchronously using asyncio.
put your code in an asyncio coroutine (method starting with
async def
)use
async with client as session:
to connect to the backend and provide a session instanceuse the
await
keyword to execute requests:await session.execute(...)
then run your coroutine in an asyncio event loop by running
asyncio.run
Example:
import asyncio
from gql import Client, gql
from gql.transport.aiohttp import AIOHTTPTransport
async def main():
transport = AIOHTTPTransport(url="https://countries.trevorblades.com/graphql")
# Using `async with` on the client will start a connection on the transport
# and provide a `session` variable to execute queries on this connection
async with Client(
transport=transport,
fetch_schema_from_transport=True,
) as session:
# Execute single query
query = gql(
"""
query getContinents {
continents {
code
name
}
}
"""
)
result = await session.execute(query)
print(result)
asyncio.run(main())
IPython¶
Warning
On some Python environments, like Jupyter or Spyder, which are using IPython, an asyncio event loop is already created for you by the environment.
In this case, running the above code might generate the following error:
RuntimeError: asyncio.run() cannot be called from a running event loop
If that happens, depending on the environment,
you should replace asyncio.run(main())
by either:
await main()
OR:
loop = asyncio.get_running_loop()
loop.create_task(main())