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

17

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

比如说,像这样的任务:

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

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

如果我使用%px魔法或并行执行 - 在完成之前关闭浏览器后,结果也不会出现。

有什么可用的扩展或技巧吗?还是我忽略了什么?

更新 1:

虽然 IPython 支持后台作业控制,但在我断开浏览器后,后台作业变得过时。我唯一能想到的是在关闭浏览器之前发出 %connect_info 然后在屏幕终端上连接。

ipython console --existing <ID>.json

并从那里运行我的作业。

更新2:

更有帮助的技巧是将ipython console和作业控制结合起来。即我打开控制台并附加到与在浏览器中启动后台作业相同的会话,然后我可以自由关闭它,直到作业完成。

更新3:

自从iPython 1.0dev版本以来似乎可以正常使用,无需任何技巧。你只需要运行你想要的,关闭浏览器,它仍然在运行。

2个回答

3

我通常使用Linux命令行工具"screen",它可以打开一个不同的shell并在后台运行。

例如,当你首次进入shell时,输入"screen"命令即可获得一个新的终端。然后使用上述命令启动ipython。一旦程序开始运行,在键盘上按下CTRL+A CTRL+D,程序将在后台运行,此时你可以关闭终端。如果你想要回到该程序,请在命令行中输入"screen -r"。


Stephan,也许我没有表达清楚,但我是在询问iPython笔记本——这是一个基于浏览器的控制台。我发现没有办法使用基于控制台的浏览器从屏幕下方访问iPython。 - Anaderi

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接