Я сделал модуль с условием if на количество ядер.
module mymodule
import Pkg
import PyCall
using Distributed
if nworkers() > 1
@everywhere using Pkg
@everywhere Pkg.activate(".")
@everywhere Pkg.instantiate()
@everywhere using PyCall
@everywhere @pyimport scipy.signal as ss
function parallel()
....
end
else
using Pkg
Pkg.activate(".")
Pkg.instantiate()
using PyCall
@pyimport scipy.signal as ss
function serial()
....
end
end
end #mymodule
Код выдает следующую ошибку при выполнении
ERROR: LoadError: LoadError: UndefVarError: @pyimport not defined
Stacktrace:
[1] top-level scope
[2] include at ./boot.jl:326 [inlined]
[3] include_relative(::Module, ::String) at ./loading.jl:1038
[4] include(::Module, ::String) at ./sysimg.jl:29
[5] include(::String) at ./client.jl:403
[6] top-level scope at none:0
in expression starting at /storage/work/s/mymodule.jl:81
in expression starting at /storage/work/s/mymodule.jl:30
, где строка 81 - это строка в другом состоянии, соответствующая @pyimport scipy.signal as ss
, а строка 30 соответствует if nworkers() > 1
.
До этой проблемы в коде была проблема со строкой @everywhere @pyimport scipy.signal as ss
, но она исчезла при использовании import PyCall
;странно, однако, это не решило прежнюю проблему.
Кто-нибудь испытывал подобную проблему или знал о таких проблемах?