python-3.x - 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 笔记本中是典型的吗?
解决方案
在后者停止之前,您应该要求线程重新加入单元的主线程。这可以通过把
w.join()
w2.join()
t.join()
在单元格的末尾。
推荐阅读
- python - 在不生成服务帐户 client_secrets 的情况下访问 Google Analytics API
- reactjs - 调度后Reactjs推送路由
- c# - 在 asp.net 上定义 Https
- r - 如何使用 shinymaterial 包在 material_side_nav 上的图像上添加文本和 href
- python - UnboundLocalError:分配前引用的局部变量“fullfilename”
- java - 与反射兼容的设计模式
- javascript - Javascript日期比较不包含年份
- swift - 单击分段时如何将文本字段扩展到全宽?
- javascript - 作为参数传递的异步函数代替 Promise,显示不同的结果
- python - Python 的请求没有从 Google 新闻中抓取正确的内容