首页 > 解决方案 > Jupyter 笔记本中的线程

问题描述

我尝试在 Jupyter 笔记本中运行以下代码片段:

    import threading
    import time         
    def worker():
        print(threading.current_thread().getName(), 'Starting')
        time.sleep(0.2)
        print(threading.current_thread().getName(), 'Exiting')


    def my_service():
        print(threading.current_thread().getName(), 'Starting')
        time.sleep(0.3)
        print(threading.current_thread().getName(), 'Exiting')


    t = threading.Thread(name='my_service', target=my_service)
    w = threading.Thread(name='worker', target=worker)
    w2 = threading.Thread(target=worker)  # use default name

    w.start()
    w2.start()
    t.start()

这是输出:

    worker Starting
    Thread-10 Starting
    my_service Starting

我没有看到以下预期输出:

    Thread-10 Exiting
    worker Exiting
    my_service Exiting

(我在使用命令行运行我的 python 文件时确实得到了这些)

这在 Jupyter 笔记本中是典型的吗?

标签: python-3.xjupyter-notebookpython-multithreading

解决方案


在后者停止之前,您应该要求线程重新加入单元的主线程。这可以通过把

w.join()
w2.join()
t.join()

在单元格的末尾。


推荐阅读