python - 在 Jupyter 上启动 python 脚本作为后台作业
问题描述
我正在尝试在Jupiter notebook*.py
中将文件作为后台服务运行。
from IPython.lib import backgroundjobs as bg
jobs = bg.BackgroundJobManager()
jobs.new(%run -i "script.py") # Not working
jobs.new("script.py") # Not working
解决方案
Ipython/Jupyter 后台作业旨在运行纯代码到eval
(字符串)或函数。不支持文件和 ipython 魔术命令。
您可以做的一件事是简单地读取文件内容并将其传递给eval
:
from IPython.lib.backgroundjobs import BackgroundJobFunc
with open('script.py') as code:
job = BackgroundJobFunc(exec, code.read())
result = job.run()
BackgroundJobManager
几乎相同,但有点“更聪明”。
旁注:此接口背后的所有后台机器都在同一进程的线程中运行,并共享解释器状态和输出。所以,请记住:
- 这不适合计算量大的脚本
- 永远不要以这种方式运行不受信任的代码——这适用于
eval
整体,但在这种情况下,您可能会遇到永远无法让 GIL 回到“前端”线程的情况 - 避免使用标准输出的脚本,这些脚本很可能会与您的主线程密切相关
推荐阅读
- linux - 如何控制内核空间中的 LED 列表
- python - 散景(Python):在悬停工具提示中格式化日期时间
- kubernetes - 如何配置 Kubernetes 以接收 TCP 连接
- java - Printf 无法正常工作,不断重复下一行
- python-3.x - Python:尝试将单列从 Float 转换为 Int
- sql-like - 在字段中搜索作为字符串的单词
- mysql - 使用不同的值更新表列
- hyperledger-fabric - 如果禁用通道功能,我们可以从 Kafka(1.4.0) 迁移到 RAFT(1.4.3) 吗?
- postgresql - 仅删除尾随 '.0' postgresql
- r - 如何删除列表中存在的所有数据框中的列?