繁体   English   中英

如何知道里面的线程名称

[英]How to know the name of the thread inside it

我使用 for 循环创建了多个线程,我需要读取线程内的线程名称。 我怎么做? 我使用 threading.Thread.name 但返回线程 object 的一些 memory 地址。这是我的代码的一部分:

def catch_sharp_fall(update, context, x):
    global access_token, watchlist, bot, chat_id, market_open_alert, nifty, bot_reset, stop_catch_sharp_fall, \
        kite_api_key
    ins_code = x
    kite = KiteConnect(kite_api_key)
    kite.set_access_token(access_token)
    kws = KiteTicker(kite_api_key, access_token)

    def on_ticks(ws, ticks):
        logging.debug("Ticks: {}".format(ticks))

    def on_connect(ws, response):
        ws.subscribe([ins_code])
        ws.set_mode(ws.MODE_FULL, [ins_code])

    def on_close(ws, code, reason):
        ws.stop()

    kws.on_ticks = on_ticks
    kws.on_connect = on_connect
    kws.on_close = on_close
    kws.connect(threaded=True)

    while True:
        def on_ticks(ws, ticks):
            feed_data(ticks)

        def feed_data(ticks):
            list_of_threads_running = [i.name for i in threading.enumerate()]
            logging.info(f'list of threads running {list_of_threads_running}')
            # update.message.reply_text(f'<b>I am the stock {ins_code}</b>', parse_mode='HTML')
            logging.info(f'{threading.Thread.name}')

        kws.on_ticks = on_ticks
for x in watchlist:
    t = threading.Thread(name=str(x), target=catch_sharp_fall, args=(update, context, x))
    t.setDaemon(True)
    t.start()

当您执行threading.Thread.name时,您是在Thread类型本身上检索name ,而不是在当前线程的线程 object 上检索名称。 你需要在当前线程object上查一下:

threading.current_thread().name

您可以使用threading.current_thread().namet1.namet2.name ,如下所示:

import threading

def test1():                             
    print(threading.current_thread().name) # "Thread-1"

def test2():
    print(threading.current_thread().name) # "test_thread"
                                                              
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2, name="test_thread")
                                    # Thread name
t1.start()
t2.start()                         
t1.join()
t2.join()
print(t1.name) # "Thread-1"
print(t2.name) # "test_thread"
print(threading.current_thread().name) # "MainThread"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM