从笔记本启动IPython集群并延迟执行

2 投票
1 回答
547 浏览
提问于 2025-04-17 18:54

我们的SGE集群设置要求控制器和引擎启动之间有一个延迟。如果没有这个延迟,有些服务器会使用“旧的” ipcontroller-client.json 文件,试图连接到之前的(而且已经不在运行的)控制器。这是NFS的一个“特性”,所以为了修复这个问题,我在ipcluster_config.py文件中设置了 c.IPClusterStart.delay = 30,这样一切就正常了。控制器被提交到SGE,有足够的时间启动并写入它的json文件,然后引擎可以正确地连接到新启动的控制器。不过,我也想从笔记本启动集群。不幸的是,似乎这个超时没有被使用,控制器和引擎同时启动(通过 watch qstat 可以看到),有些引擎连接上了(因为它们从json文件中获取了新的设置),而有些则没有(因为NFS的问题)。

我在笔记本上运行了一个strace,看到它使用了 sge_controllersge_engines 脚本(当你按下启动时,笔记本会创建这些脚本)来启动这些进程。

我在想这里有没有办法也实现一个延迟。它以正确的方式(SGE)启动控制器和引擎,所以我知道它在读取 ipcluster_config.py 文件。

我在谷歌上搜索过,也在这个网站上查找过,但没有找到解决办法。希望有人能帮我解释一下这个行为的更深层次的工作原理。

谢谢,
Chris

1 个回答

2

好吧,这可能对提问者来说有点晚,但希望能帮助到其他人。

如果是超时的问题,可以把 c.EngineFactory.timeoutc.IPEngineApp.wait_for_url_file 的时间设置得更长一些。

如果是第一次运行后出现的失败,可能是因为一些安全文件还留在那儿,这些文件需要被删除(比如 ipcontroller-engine.jsonipcontroller-client.json)。你可以用 IPython.utils.path.get_security_file 来找到这些文件的完整路径。为了让这个过程更简单,可以把删除这些文件的步骤加到同一个配置文件的开头,也就是 ipcluster_config.py

光是这些改动就足够让我顺利地用笔记本启动集群了。

如果这些方法都不能解决问题,还有其他一些建议(http://mail.scipy.org/pipermail/ipython-user/2011-November/008741.html)。

撰写回答