在分离模式下在IPython Notebook中运行一些任务

时间:2013-04-23 10:57:46

标签: python background ipython ipython-notebook ipython-magic

是否可以在IPython Notebook中运行一些长任务,关闭浏览器,然后再过一段时间再打开它并显示这些任务的结果?

说,这样的任务:

def f():
    import time
    time.sleep(100)
    with open("result.txt", "w") as fh:
        fh.write("Done.")

如果我正常运行任务,并在完成之前关闭浏览器,当我打开它时,我看不到'result.txt'

如果我使用%px魔术或并行执行来运行它 - 如果我在完成之前关闭浏览器,则再没有结果。

可用的任何扩展或黑客?或者我错过了什么?

更新1:

虽然有background jobs control support in IPython,但在断开浏览器后,后台作业变得陈旧。 我唯一能想到的就是在关闭浏览器之前发出%connect_info,然后使用

从屏幕终端连接
ipython console --existing <ID>.json

从那里开始工作。

更新2:

更有帮助的黑客是ipython console和工作控制的组合。即我在浏览器中启动后台作业时打开控制台并连接到同一会话,然后我可以自由关闭它直到作业完成。

更新3:

自从版本iPython 1.0dev没有任何黑客攻击之后,它似乎起作用了。你只需运行你想要的,关闭浏览器,它仍然运行。

2 个答案:

答案 0 :(得分:3)

我通常使用linux命令屏幕,它会打开一个可以在后台运行的不同shell。

例如,当您第一次进入shell时,键入“screen”。然后它会给你一个新的终端。使用上面的命令启动ipython。一旦运行,在键盘上按CTRL + A CTRL + D.然后程序开始在后台运行,您可以关闭终端。如果要返回它,请在命令行中键入“screen -r”。

答案 1 :(得分:1)

我不知道这是否是IPython 1.0中的新功能,但是在我的IPython笔记本中,如果我调用你的函数f()并关闭浏览器,内核会在后台运行并且过一会儿(我更改为time.sleep(10))我看到生成了results.txt文件。我不认为您通常在控制台中启动的内核在关闭浏览器窗口时会停止。如果我弄错了,请告诉我。