Lit*_*chy 5 java scala environment-variables
我使用一些脏代码从这个问题的第二个答案在 Scala 中设置环境变量
我在 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)
Run Code Online (Sandbox Code Playgroud)
设置后,我可以从 读取System.env,它有效。但是当我的程序运行时,它不使用这个。我尝试将其设置在静态块中,但仍然无法正常工作。
但是如果我在 IDE 运行配置中设置它(在 JVM 运行之前),它会按我的预期工作和运行。所以似乎它在我修改变量之前被读取。
或者换句话说,我有一段代码,在 Java/Scala 中最早的调用方式是什么。例如,在main 方法的第一行之前调用静态块。
我正在使用 tensorflow-mkl Java API,它会OMP_NUM_THREADS在某个时间读取系统环境变量,根据我的测试结果,此操作是在系统静态块之前。但是,我想在代码中进行控制,因为我不知道没有代码逻辑的预期配置。
我认为这是一个XY 问题:您想通过“OMP_NUM_THREADS”env 控制 OpenMP,但由于某种原因您不能或不想在进程上设置实际的环境变量?是对的吗?
您如何调用 OpenMP?OpenMP 是一个 C 库https://www.openmp.org/,因此它不会注意到您对该java.lang.ProcessEnvironment#theEnvironment字段所做的任何更改,无论您设置得有多早。
如果您通过exec调用调用 OpenMP,那么您应该能够向其传递新环境。
如果您通过 JNI 调用 OpenMP,那么您将无法从 Java 更改环境变量,您需要在启动进程时实际设置 env。请参阅我可以为 Java 本机接口 (JNI) 库设置环境变量吗?
您可以使用而omp_set_num_threads()不是OMP_NUM_THREADSenv 吗?
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |