关闭Jupyter Lab与终端后Python线程仍运行,此现象是否正常?
关于Jupyter Lab关闭后Python定时任务仍运行的疑问
我在Linux Mint系统中,使用schedule库每隔约一分钟从BACnet温控器读取数据并存储到sqlite3数据库中。发现关闭运行Jupyter Lab的Chrome浏览器以及启动Jupyter Lab的终端窗口后,该任务仍持续运行。虽然这对我而言是有利的,但我疑惑这是否属于预期行为,猜测可能是bac0或schedule库维持进程存活。我原本以为关闭上述窗口后进程会停止。
运行的代码
import time from datetime import datetime import schedule import BAC0 import sqlite3 myIPAddr = '192.168.0.65/24' bacnet = BAC0.connect(ip = myIPAddr) def SetTempFromSchedule(): def StoreData(): def SetHeatTemp(): def SetCoolTemp(): schedule.every().minute.at(":00").do(setTempFromSchedule) while True: schedule.run_pending() time.sleep(1)
问题解答
- 这属于预期行为,但核心原因并非schedule或bac0库,而是Jupyter Lab的进程管理逻辑:
- 关闭Chrome浏览器只是断开了和Jupyter前端的交互连接,后台运行的Jupyter内核进程不会因此终止,你的定时循环代码正运行在内核进程中;
- 启动Jupyter Lab的终端窗口默认不会在关闭时连带杀死子进程,因此Jupyter服务和内核进程会继续后台运行。
- 若希望关闭窗口后进程停止,可通过以下方式实现:
- 在Jupyter Lab界面内,手动中断对应内核(点击代码右上角的停止按钮,或通过「运行」菜单选择中断内核);
- 启动Jupyter时使用命令
jupyter lab --no-browser,结束时在终端按Ctrl+C停止服务,关联的内核进程会随之终止; - 将代码保存为独立
.py脚本,用python 脚本名.py直接运行,此时关闭终端窗口会默认终止该进程。
内容的提问来源于stack exchange,提问作者David Filler
相关产品推荐
相关产品推荐

