在Jupyter上启动python脚本作为后台作业

问题描述 投票:1回答:1

我试图在Jupiter笔记本中运行*.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
python jupyter
1个回答
2
投票

Ipython / Jupyter后台作业旨在运行简单代码到eval(字符串)或函数。不支持Files和ipython magic命令。

您可以做的一件事是简单地读取文件内容并将其传递给eval

from IPython.lib.backgroundjobs import BackgroundJobFunc

with open('script.py') as code:
    job = BackgroundJobFunc(exec, code.read())

result = job.run()

BackgroundJobManager几乎是一样的,但有点“聪明”。

旁注:此接口后面的所有后台机制都在同一进程的线程中运行,并共享解释器状态和输出。所以,请记住:

  • 这不适合计算量大的脚本
  • 永远不会以这种方式运行不受信任的代码 - 这适用于eval整体,但在这种情况下你可以进入你永远不会让GIL回到你的“前端”线程的情况
  • 避免使用stdout的脚本,很可能那些会与你的主线程一起离合
© www.soinside.com 2019 - 2024. All rights reserved.