Asyncio Python的超时上下文管理器

aiotimeout的Python项目详细描述


艾奥蒂梅奥特CircleCITest Coverage

Asyncio Python的超时上下文管理器

用法

fromaiotimeoutimporttimeout# Will raise an asyncio.TimeoutErrorwithtimeout(1):awaitasyncio.sleep(1.5)# Will not raise anythingwithtimeout(1):awaitasyncio.sleep(0.5)

您可以通过捕获asyncio.TimeoutError

try:withtimeout(1):awaitasyncio.sleep(1.5)print('This line is not reached')exceptasyncio.TimeoutError:print('Timed out')

或者,您可以通过捕获asyncio.CancelledError并重新引发来响应上下文中的超时。

try:withtimeout(1):try:awaitasyncio.sleep(1.5)exceptasyncio.CancelledErrorprint('Doing some cleanup')raiseexceptasyncio.TimeoutError:print('Timed out')

与备选方案的差异

  • asyncio.wait_for不提供上下文管理器。在某些情况下,上下文管理器更清晰。

  • asyncio.wait_for创建/使用额外的任务。在某些情况下,这是不必要的,而且额外的任务在操作序列方面增加了非确定性。

  • 更清晰的内部代码[在作者看来]。使用contextlib.contextmanager而不是自定义类。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java当我点击MainActivity中的按钮以显示其他活动时,它不起作用   java游戏!框架:在请求之间获取控制器的组件/字段/对象   JavaBlackBerry:调用计算器并检索值?   java Struts2 jQuery插件提交按钮   java无法将更新的画布绘制到活动   java如何将Gson值放入HashMap   使用截取时出现java错误:RecyclerView:未连接适配器;跳过布局   java组织。冬眠HibernateException:在Hibernate搜索中编制索引时出错(在事务完成之前)   java Swagger服务器存根生成工作流   java JInternalFrame底部阴影问题   java nio缓冲区类中limit()的用法是什么   java水平回收器视图内部选项卡布局   java Maven无法找到依赖项   java如何管理不同应用程序实例的权限文件?