检测当前异步库
Detecting current async library
我正在编写一些异步库,并决定支持 asyncio
和 trio
并发库以 运行 它。无论选择哪个库,我都有一些代码试图变得聪明并做正确的事情。
我如何检测运行我的代码使用了哪一个?可以两者兼而有之吗?
您需要 sniffio
库,它是专门为解决这个问题而创建的:https://github.com/python-trio/sniffio
这是文档中的示例:
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())
它目前支持 trio、asyncio、curio,并与 trio-asyncio 集成,因此如果您有一个混合程序使用 trio-asyncio 在 trio 和 asyncio 模式之间来回切换,它 returns 每种模式的正确值。它也可以扩展以支持新的库——请参阅文档。
我正在编写一些异步库,并决定支持 asyncio
和 trio
并发库以 运行 它。无论选择哪个库,我都有一些代码试图变得聪明并做正确的事情。
我如何检测运行我的代码使用了哪一个?可以两者兼而有之吗?
您需要 sniffio
库,它是专门为解决这个问题而创建的:https://github.com/python-trio/sniffio
这是文档中的示例:
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())
它目前支持 trio、asyncio、curio,并与 trio-asyncio 集成,因此如果您有一个混合程序使用 trio-asyncio 在 trio 和 asyncio 模式之间来回切换,它 returns 每种模式的正确值。它也可以扩展以支持新的库——请参阅文档。