欢迎!请参阅关于 页面以获取更多关于本站如何工作的信息。
在 https://github.com/cnuernber/dtype-next/issues/52,我们计划通过使用 clojure 编写的机器学习库使 java、clojure 和其他非 JVM 语言之间的互操作性更容易。我们还想为 dataframe 和 ndarray 创建到 julia (libjulia-clj) 和 python (libpython-clj) 的有效路径。
我在这里取得了 clojure 与 java 集成的重大进展:https://github.com/invesdwin/invesdwin-context/blob/master/invesdwin-context-parent/invesdwin-context-clojure/src/main/java/de/invesdwin/context/clojure/pool/(复现问题的测试用例在同一个项目中)
现在单线程测试运行正常,但是当使用超过 1 个线程时,绑定似乎不起作用。从我了解的情况来看,clojure 应该使用 threadlocals 来处理命名空间变量。但我可能遗漏了一些系统属性来正确地隔离一切?(类似于 jruby 的 org.jruby.embed.localcontext.scope=threadsafe; https://github.com/jruby/jruby/wiki/RedBridge#Context_Instance_Type)
我是不是做错了什么,或者 clojure 无法在多个线程并行调用时避免命名空间冲突?看起来 clojure 自动绑定到初始化它的第一个线程,任何其他线程都会遇到绑定错误
作为 workaround,我可以将 clojure 的交互限制在单个线程中,并通过 executor 将脚本执行委托给那个单线程。尽管如果 clojure 的线程本地隔离能够在多个线程中工作,这将更有效率。
我已通过为每个线程使用单独的命名空间找到了一个解决方案:[链接](https://github.com/cnuernber/dtype-next/issues/52#issuecomment-1013685393)
现在所有测试用例都是绿色的。