使用三元组库的time模块中的sleep()代替anyio.sleep()。
示例代码:
import time
import trio
import asyncio
import anyio
async def asyncio_sleep():
start = asyncio.get_running_loop().time()
await asyncio.sleep(0.001)
elapsed = asyncio.get_running_loop().time() - start
print(f"asyncio: {elapsed:.5f} seconds")
async def trio_sleep():
start = time.monotonic()
await trio.sleep(0.001)
elapsed = time.monotonic() - start
print(f"trio: {elapsed:.5f} seconds")
async def anyio_sleep():
start = anyio.get_running_loop().time()
await anyio.sleep(0.001)
elapsed = anyio.get_running_loop().time() - start
print(f"anyio: {elapsed:.5f} seconds")
async def main():
await asyncio.gather(asyncio_sleep(), trio_sleep(), anyio_sleep())
asyncio.run(main())
使用time.monotonic()代替anyio.get_running_loop().time()可以解决该问题。在小睡眠时间上使用上述代码可以得到准确的结果。