В настоящее время я работаю с Джулией (1.0), чтобы запустить некоторый параллельный код на кластерах HPC. HPC управляется с помощью PBS. Я пытаюсь найти способ трансляции переменных среды по всем процессам, т.е. способ автоматической трансляции определенного списка переменных среды, чтобы иметь доступ к ним в каждом воркере Julia.
#!/bin/bash
#PBS ...
export TOTO=toto
julia --machine-file=$PBS_NODEFILE my_script.jl
В этом примере я не смогу получить доступ к переменной TOTO в каждом воркере julia (через ENV["TOTO"]).
Единственный способ сделать то, что я хочу, - это установить переменные в моем .bashrc, но я хочу, чтобы это было специфично для сценария. Другой способ - добавить мой файл startup.jl:
@everywhere ENV["TOTO"] = $(ENV["TOTO"])
Но это не зависит от сценария, потому что я должен заранее знать, какие переменные я хочу отправить. Если я зацикливаюсь на ключах ENV, я буду транслировать все переменные, а затем переопределять переменные, которые мне не нужны.
Я пытался использовать DotEnv.jl
, но это не работает.
Спасибо за ваше время.
Очевидный способ — сначала установить переменные в script.jl
. Вы также можете поместить инициализацию в отдельный файл, например. environment.jl
и загрузите его во все процессы с флагом -L
:
julia --machine-file=$PBS_NODEFILE -L environment.jl my_script.jl
где environment.jl
в этом случае будет содержать
ENV["TOTO"] = "toto"
и т.п.