如何为异步任务设置名称?

Posted

技术标签:

【中文标题】如何为异步任务设置名称?【英文标题】:How to set name for asyncio task? 【发布时间】:2017-01-22 17:49:33 【问题描述】:

我们有一种方法可以设置线程名称:thread = threading.Thread(name='Very important thread', target=foo),然后在格式化程序中使用%(thread)s: 获取此名称以进行日志记录。 可以用asyncio.Task 做这样的事情吗?

【问题讨论】:

任务名称计划用于 Python 3.8。 【参考方案1】:

您可以通过以下方式访问当前任务:

asyncio.Task.current_task()

与任何其他 python 对象一样,您可以向Task 动态添加一些属性。例如,将此添加到任何启动新任务的协程的第一行:

asyncio.Task.current_task().foo = "Bar"
asyncio.Task.current_task().name = "#".format(n)

添加logging filter 以使用您的记录器输出此数据。

【讨论】:

太棒了!我从来没有想过:“为什么我们需要这些过滤器?” :)【参考方案2】:

从 Python 3.8 开始,您可以在 asyncio 中命名您的任务

https://docs.python.org/3/library/asyncio-task.html#asyncio.create_task

https://docs.python.org/3/library/asyncio-task.html#asyncio.Task.set_name

例如:

asyncio.create_task(your_coro(), name="your task name")
# or
task = asyncio.create_task(your_coro())
task.set_name("your task name")

【讨论】:

以上是关于如何为异步任务设置名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何为不接受取消令牌的异步函数设置超时?

同步任务和异步任务

Java如何实现任务超时处理

调用异步任务芹菜时引发异常:“NameError:未定义全局名称*”

如何用异步任务装饰午睡请求

开源项目精选: 异步与异步编程