Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 简单(st)Datomic测试程序在出口处挂起_Clojure_Datomic - Fatal编程技术网

Clojure 简单(st)Datomic测试程序在出口处挂起

Clojure 简单(st)Datomic测试程序在出口处挂起,clojure,datomic,Clojure,Datomic,以下程序在从anüberjar运行时,仅在使用内存中的数据库时才在末尾退出;连接到Datomic服务器时,它将无限期挂起,而不是退出JVM: (ns myns.example (:use [datomic.api :only [db q] :as d]) (:gen-class)) ;; WORKS: (def uri "datomic:mem://testdb") (def uri "datomic:free://localhost:4334/testdb2") (defn -m

以下程序在从anüberjar运行时,仅在使用内存中的数据库时才在末尾退出;连接到Datomic服务器时,它将无限期挂起,而不是退出JVM:

(ns myns.example
  (:use [datomic.api :only [db q] :as d])
  (:gen-class))

;; WORKS: (def uri "datomic:mem://testdb")

(def uri "datomic:free://localhost:4334/testdb2")

(defn -main []
  (println 1)
  (when (d/create-database uri)
    (d/connect uri))
  (shutdown-agents)
  (println 2))
运行方式:

lein uberjar && java -cp target/myns-0.1.0-SNAPSHOT-standalone.jar myns.example
产出:

1
2
然后挂起来。只有当程序启动时数据库不存在时,它才会挂起

有人知道为什么,或者如何修复吗?这适用于
datomic-free-0.8.4020.26
datomic-free-0.8.3941


更新——上述程序实际上会终止,但需要很长时间(>1分钟)。我想知道原因。

关闭代理程序
最多需要一分钟才能完成(假设没有代理程序正在运行操作)


这是由于
java.util.concurrent
缓存线程池的工作方式造成的。

关闭代理需要一分钟才能完成(假设没有代理运行操作)

这是由于
java.util.concurrent
缓存线程池的工作方式。

使用

关闭 作用

用法:(关闭clojure)

关闭所有对等服务器 资源。此方法应作为清洁关机的一部分调用 JVM进程。将释放所有连接,如果关闭clojure 是真的,将释放Clojure资源。用Clojure编写的程序 如果他们管理clojure资源,则可以将shutdown clojure设置为false (如代理人)Datomic以外的机构;用其他JVM编写的程序 语言通常应将shutdown clojure设置为true

在Datomic Clojure版本0.8.3861中添加

使用

关闭 作用

用法:(关闭clojure)

关闭所有对等服务器 资源。此方法应作为清洁关机的一部分调用 JVM进程。将释放所有连接,如果关闭clojure 是真的,将释放Clojure资源。用Clojure编写的程序 如果他们管理clojure资源,则可以将shutdown clojure设置为false (如代理人)Datomic以外的机构;用其他JVM编写的程序 语言通常应将shutdown clojure设置为true

在Datomic Clojure版本0.8.3861中添加


您是否尝试过
(d/release conn)
?尝试过,但没有明显区别--但我在过程中了解到,上面的程序最终会终止,它只需要一分钟(!!!)。您尝试过
(d/release conn)吗
?尝试了一下,没有明显的区别——但我在过程中了解到,上面的程序最终会终止,只需要一分钟(!!!)。谢谢!无论我是否为关闭代理而烦恼,程序都需要一分钟左右的时间才能完成。知道为什么吗?我猜Datomic在调用它?如果不是这样的话,那么程序将永远挂起…谢谢,鉴于1分钟的时间刻度匹配,我认为这是一个公认的答案,尽管我不明白当我删除
关机代理时关机是如何发生的。不过,我可能完全错了-而且时间只是巧合。尝试睡眠30秒,然后发送代理到println一些值。如果成功,则不涉及关机代理。谢谢!无论我是否为关闭代理而烦恼,程序都需要一分钟左右的时间才能完成。知道为什么吗?我猜Datomic在调用它?如果不是这样的话,那么程序将永远挂起…谢谢,鉴于1分钟的时间刻度匹配,我认为这是一个公认的答案,尽管我不明白当我删除
关机代理时关机是如何发生的。不过,我可能完全错了-而且时间只是巧合。尝试睡眠30秒,然后发送代理到println一些值。如果成功,则不涉及关机代理。
(ns myns.example
  (:require [datomic.api :as d])
  (:gen-class))

(def uri "datomic:free://localhost:4334/testdb2")

(defn -main []
  (d/create-database uri)
  (let [conn (d/connect uri)]
    (try
      ;; do something
      (finally (d/shutdown true)))