【问题标题】:How to know the name of the thread inside it in python如何在python中知道其中线程的名称
【发布时间】:2022-11-01 17:18:18
【问题描述】:

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

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()

【问题讨论】:

  • 线程并没有真正的名字。它们通常有 Thread-0 和 Thread-1。我建议在您的情况下查看线程池
  • threading.current_thread().name

标签: python python-multithreading


【解决方案1】:

当您执行threading.Thread.name 时,您将在Thread 类型本身上检索name,而不是在当前线程的线程对象上。您需要在当前线程对象上查找它:

threading.current_thread().name

【讨论】:

    【解决方案2】:

    您可以使用threading.current_thread().name,t1.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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-24
      • 2017-12-30
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      相关资源
      最近更新 更多