如何为异步任务设置名称?
How to set name for asyncio task?
我们有一种方法可以设置线程名称:thread = threading.Thread(name='Very important thread', target=foo)
,然后在格式化程序中使用 %(thread)s:
获取此名称以进行日志记录。
是否可以用 asyncio.Task
做这样的事情?
您可以通过以下方式访问当前任务:
asyncio.Task.current_task()
与任何其他 python 对象一样,您可以向 Task
动态添加一些属性。例如,将此添加到任何启动新任务的协程的第一行:
asyncio.Task.current_task().foo = "Bar"
asyncio.Task.current_task().name = "#{}".format(n)
添加一个 logging filter 以使用您的记录器输出此数据。
从 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")
我们有一种方法可以设置线程名称:thread = threading.Thread(name='Very important thread', target=foo)
,然后在格式化程序中使用 %(thread)s:
获取此名称以进行日志记录。
是否可以用 asyncio.Task
做这样的事情?
您可以通过以下方式访问当前任务:
asyncio.Task.current_task()
与任何其他 python 对象一样,您可以向 Task
动态添加一些属性。例如,将此添加到任何启动新任务的协程的第一行:
asyncio.Task.current_task().foo = "Bar"
asyncio.Task.current_task().name = "#{}".format(n)
添加一个 logging filter 以使用您的记录器输出此数据。
从 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")