Python多线程场景下如何在线程内部获取自身的name属性值
问题原因
你直接访问threading.Thread.name是访问Thread类本身的属性描述符,不是当前正在运行的线程实例的属性,因此无法得到预期的线程名,只会输出类属性相关的内存地址类内容。
正确实现方法
调用threading.current_thread()方法获取当前执行代码的线程实例,再读取该实例的name属性即可,对应修改代码中的日志输出行即可:
# 替换原来错误的写法 logging.info(f'{threading.current_thread().name}')
额外注意事项
- 如果你是在KiteTicker的回调逻辑中读取线程名,需要注意KiteTicker内部会自己启动独立线程处理回调事件,此时
threading.current_thread().name拿到的是KiteTicker内部线程的名称,不是你最开始创建的执行catch_sharp_fall的线程名。如果需要获取你自定义的线程名,可以在catch_sharp_fall函数开头先把线程名存为局部变量,内部函数直接引用该变量即可:
def catch_sharp_fall(update, context, x): # 开头先存自定义线程名 custom_thread_name = threading.current_thread().name # 剩下的原有代码不变 # ... def feed_data(ticks): # 直接用提前存好的线程名即可 logging.info(custom_thread_name)
- 你现有代码中
while True循环反复给kws.on_ticks赋值的逻辑存在冗余,实际使用时可以优化去掉该循环。
内容的提问来源于stack exchange,提问作者KawaiKx
相关产品推荐
相关产品推荐

