Python 3.x Jupyter笔记本中的线程

Python 3.x Jupyter笔记本中的线程,python-3.x,jupyter-notebook,python-multithreading,Python 3.x,Jupyter Notebook,Python Multithreading,我尝试在Jupyter笔记本中运行以下代码段: import threading import time def worker(): print(threading.current_thread().getName(), 'Starting') time.sleep(0.2) print(threading.current_thread().getName(), 'Exiting') def m

我尝试在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语句结束,Jupyter将收集输出并将其作为单元格结果显示


尝试在Jupyter上的单元格末尾添加一个
时间。sleep(1)
,在启动工作线程之后,它应该可以工作。

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

w.join()
w2.join()
t、 加入

在单元格的末尾。

这是一个黑客攻击,睡眠时间必须调整到线程中的任务,因此
time.sleep(1)
将不再有用,如果原始线程的任务持续时间超过一秒。