Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting current async library

I'm writing some async library and decided to support both asyncio and trio concurrency libraries to run it. I have some code that tries to be clever and do the right thing no matter which library was chosen.

How can I detect which one of those was used to run my code? Could it be both?

like image 650
nosklo Avatar asked Sep 02 '19 21:09

nosklo


1 Answers

You want the sniffio library, which was created specifically to solve this problem: https://github.com/python-trio/sniffio

Here's the example from the docs:

from sniffio import current_async_library
import trio
import asyncio

async def print_library():
    library = current_async_library()
    print("This is:", library)

# Prints "This is trio"
trio.run(print_library)

# Prints "This is asyncio"
asyncio.run(print_library())

It currently supports trio, asyncio, curio, and is integrated with trio-asyncio so that if you have a hybrid program that's using trio-asyncio to switch back and forth between trio and asyncio modes, it returns the correct value for each mode. And it's extensible to support new libraries too – see the docs.

like image 170
Nathaniel J. Smith Avatar answered Sep 20 '22 04:09

Nathaniel J. Smith