【发布时间】:2021-05-17 03:02:52
【问题描述】:
我使用一些脏代码在 Scala 中从 second answer of this question 设置环境变量
我在 IDE(IDEA Intellij) 中对此进行了测试,并在课程开始时设置了 OMP_NUM_THREADS。
import org.scalatest.{FlatSpec, Matchers}
class MyTest extends FlatSpec with Matchers {
val m = Map("OMP_NUM_THREADS" -> "1")
EnvHacker.setEnv(m)
设置后,我可以从System.env 读取,它可以工作。但是当我的程序运行时,它不使用它。我尝试将它设置在静态块中,但仍然无法正常工作。
但如果我在 IDE 运行配置中设置它(在 JVM 运行之前),它会按我的预期工作和运行。所以似乎是在我修改变量之前读取的。
或者换句话说,我有一段代码,在 Java/Scala 中调用它的最早方式是什么。例如在 main 方法的第一行之前调用 static 块。
更新了一些细节:
我使用的是tensorflow-mkl Java API,它有时会读取系统环境变量OMP_NUM_THREADS,根据我的测试结果,这个操作是在系统静态块之前。但是,我想在代码中进行控制,因为我不知道没有代码逻辑的预期配置。
【问题讨论】:
-
您的程序如何检索此环境变量?会不会是它在您运行
EnvHacker.setEnv之前检索它? -
@GaëlJ 我想是的,那么它在运行代码的第一行之前检索到任何条件吗?
-
这完全取决于您的程序在何处/何时检索此环境变量。如果这是您使用的框架/库的一部分,要么他们提供了某种“挂钩”,您可以在他们的代码运行之前调用它们,或者这可能是一个死胡同。
-
澄清一下,您是否只在某些测试或应用运行时才需要此环境变量?
-
在运行时,我想对进程做更多的控制,但此时不想创建其他进程。如果没有办法,也许我会创建另一个使用 ProcessBuilder
标签: java scala environment-variables