This was my approach: def _detect_running_asynclib() -> str: if 'trio' in sys.modules: from trio.hazmat import current_trio_token try: current_trio_token() except RuntimeError: pass else: return 'trio'
if 'curio' in sys.modules: from curio.meta import curio_running if curio_running(): return 'curio' if 'asyncio' in sys.modules: from .backends.asyncio import get_running_loop if get_running_loop() is not None: return 'asyncio' raise LookupError('Cannot find any running async event loop') Is there something wrong with this? to, 2018-08-16 kello 00:01 -0700, Nathaniel Smith kirjoitti: > Hi all, > A number of people are working on packages that support multiple > asyncbackends (e.g., asyncio + trio, or trio + curio, or trio + > twisted,...). So then the question arises... how can I figure out > which asynclibrary my user is actually using? > Answer: install sniffio, and then > callsniffio.current_async_library(), and it tells you. > Well, right now it only works for trio and asyncio, but if > youmaintain an async library and you want to make it easier for > packagesto detect you, then it's easy to add support – see the > manual. Weconsidered various clever things, but ultimately decided > that the bestapproach was to use a ContextVar and make it the > coroutine runner'sresponsibility to advertise which async flavor it > uses. In particular,this approach works even for hybrid programs that > are using multiplecoroutine runners in the same loop, like a Twisted > program withasyncio-flavored and twisted-flavored coroutines in the > same thread,or a Trio program using trio-asyncio to run both asyncio- > flavored andtrio-flavored coroutines in the same thread. > Github: https://github.com/python-trio/sniffioManual: > https://sniffio.readthedocs.io/PyPI: https://pypi.org/p/sniffio > -n >
_______________________________________________ Async-sig mailing list Async-sig@python.org https://mail.python.org/mailman/listinfo/async-sig Code of Conduct: https://www.python.org/psf/codeofconduct/