为什么asyncio.sleep不';你不能用python吗?

为什么asyncio.sleep不';你不能用python吗?,python,logging,python-asyncio,sleep,Python,Logging,Python Asyncio,Sleep,这是我的密码: logging.basicConfig(格式='%(asctime)s%(name)s%(levelname)s%(message)s', 级别=logging.INFO, 处理者=[ logging.FileHandler(“bot.log”), logging.StreamHandler() ] ) ... 异步定义创建顺序(顺序,延迟=0): 如果延迟: logging.info(f'sleep{delay}') start=timeit.default\u timer()

这是我的密码:

logging.basicConfig(格式='%(asctime)s%(name)s%(levelname)s%(message)s',
级别=logging.INFO,
处理者=[
logging.FileHandler(“bot.log”),
logging.StreamHandler()
]
)
...
异步定义创建顺序(顺序,延迟=0):
如果延迟:
logging.info(f'sleep{delay}')
start=timeit.default\u timer()
等待异步睡眠(延迟)
logging.info(f'appeased{timeit.default_timer()-start})
...
并生成日志:

2021-04-05 17:20:18,274 root INFO sleep 0.01
2021-04-05 17:20:18,274 root INFO elapsed 0.0001959000000000266
延迟=0.1时,效果更好,但与预期不同:

2021-04-05 17:25:50,849 root INFO sleep 0.1
2021-04-05 17:25:50,940 root INFO elapsed 0.09012620000000027

为什么asyncio.sleep不起作用?操作系统windows10。Python 3.9

asyncio的睡眠分辨率非常差,尤其是在Windows上。在Windows上,分辨率约为。您的第一次睡眠持续时间低于睡眠分辨率,因此最终可能根本无法入睡。在第二次测试中,请求的睡眠持续时间与实际睡眠持续时间之间的差异仍然小于15毫秒。

asyncio的睡眠分辨率非常差,尤其是在Windows上。在Windows上,分辨率约为。您的第一次睡眠持续时间低于睡眠分辨率,因此最终可能根本无法入睡。在第二次测试中,请求的睡眠持续时间与实际睡眠持续时间之间的差异仍然小于15毫秒。

这显然是Windows上asyncio的问题,与Windows为获取内部时钟状态而提供的系统调用分辨率差有关,大约15毫秒的错误。您可以通过运行来测试这是否是您遇到的问题

>>导入时间;打印(时间。获取时钟信息(“单调”)

它返回时钟的分辨率。

这显然与Windows上的asyncio有关,并且与Windows提供的获取内部时钟状态的系统调用分辨率差有关,大约15毫秒的错误。您可以通过运行来测试这是否是您遇到的问题

>>导入时间;打印(时间。获取时钟信息(“单调”)


其中包括返回时钟分辨率。

睡眠(0)是否仍将控制返回Windows上的事件循环?@AleksandrGavrilov是,
等待异步IO。睡眠(0)
被记录为始终将控制权交给事件循环。睡眠(0)是否仍将控制返回Windows上的事件循环?@AleksandrGavrilov是,
await asyncio.sleep(0)
被记录为总是让事件循环获得控制权。一点研究一点研究