17

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

说,这样的任务:

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

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

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

任何可用的扩展或黑客攻击?还是我错过了什么?

更新 1:

尽管IPython 中有后台作业控制支持,但在我断开浏览器后后台作业会变得陈旧。我唯一能想到的是%connect_info在关闭浏览器之前发出,然后使用从屏幕终端连接

ipython console --existing <ID>.json

并从那里运行我的工作。

更新 2:

更有用的技巧是结合ipython console和工作控制。即,我在浏览器中启动后台作业时打开控制台并附加到同一个会话,然后我可以自由地关闭它,直到作业完成。

更新 3:

它似乎从 iPython 1.0dev 版本开始工作,没有任何黑客攻击。你只需运行你想要的,关闭浏览器,它仍然运行。

4

2 回答 2

3

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

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

于 2013-04-23T11:20:21.460 回答
1

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

于 2013-09-04T23:23:17.850 回答