代码之家  ›  专栏  ›  技术社区  ›  glenneroo Menyus777

为什么我的线是主线?

  •  1
  • glenneroo Menyus777  · 技术社区  · 8 年前

    我正在创建5个线程来处理各种任务,如读取传感器(Raspberry Pi)、TCP连接和最近录制的音频(pyAudio)。

    我以相同的方式实例化main()中的所有线程,例如:

    if __name__ == '__main__':
        main()
    
    def main():
        global network_thread
        network_thread = threading.Thread(name="NET-CONN", target=network_thread_run, args=())
        network_thread.start()
    

    我保留一个全局引用,以便在关闭时使用join()杀死线程。

    现在,我添加了线程5:

    global audio_thread
    audio_thread = threading.Thread(name="AUDIO", target=audio_thread_run(), args=())
    audio_thread.start()
    

    …但我的日志显示它在主线程上运行。我还仔细检查了audio_thread_run()函数,它确实在MainThread上运行:

    if threading.current_thread() is threading.main_thread():
        logger.warning("Audio thread is the same as MainThread!")
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   paxdiablo    8 年前

    让我们看一下创建线程的两个位置,它们经过了一些修改,使它们可以放在一行上,并插入了空格,使它们排成一行:

    net_thread = threading.Thread(name="NET", target=net_run  , args=())
    aud_thread = threading.Thread(name="AUD", target=aud_run(), args=())
    # Hmmm, what's this suspicious-looking thing here? ---->^^
    

    打电话 这个 audio_thread_run()

    如果你真的完全摆脱了线程启动的东西,它会归结为更简单的:

    audio_thread_run()
    

    哪个会 非常地

    你需要做的是 去除

    audio_thread = threading.Thread(name="AUDIO", target=audio_thread_run, args=())