可以在Slime(Swank Emacs)中后台运行一个线程吗?

7

我经常会在REPL中启动一些长时间运行的进程,然后希望在它运行的同时能够继续使用REPL进行其他任务。 我能否使用slime将当前线程放入后台或启动一个新的REPL控制线程? 也可以启动另一个REPL缓冲区。

3个回答

2

编辑:

啊,我不知怎么疏忽了你问题中的Clojure标签。如果你很熟悉Clojure社区维护自己的Slime版本,那么你可能知道,在Clojure中使用下面提供的解决方案可能并不奏效(至少对于那些同时使用Clojure和CL的人来说是这样)。我不会删除这个答案,因为它可能对寻找此功能的CL程序员有所帮助。

除非有类似的Clojure解决方案,可以在单个套接字上多路复用多个REPL,否则您可以通过手动启动第二个Swank服务器(从*inferior-lisp*缓冲区)并通过slime-connect连接到它,作为一种解决方法。(由于我已经有一段时间没有使用Slime与Clojure一起使用,因此无法测试此功能。)


您尝试了slime-mrepl贡献吗?我实际上自己还没有使用过它,但是在CCL/Win/Emacs 24下我进行了快速测试并成功了。

我像这样进行了测试:M-x slime,在REPL中输入(sleep 10),切换到另一个缓冲区,M-x slime-new-mrepl


2
请原谅我给出一个有些陈腐且与具体技术无关的答案; 但好处是它适用于任何Clojure REPL。
当我预先知道我要从REPL开始运行一个长期运行的任务时,我使用future启动计算,并在解除引用之前使用future-done?进行检查。

1
这可能不是你问题的答案,但意识到只要 (slime-communication-style):spawn,使用 C-x C-e 进行的评估总是会生成自己的线程,并且可以并行运行与 REPL 线程中发生的任何事情。输出(来自 println 等)将出现在 REPL 缓冲区中。

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