У меня возникла проблема с созданием графиков в @threads для l oop. Вот упрощенная версия моего кода:
import Plots
function main()
n_points::Int64=10
n_epochs::Int64=100
NP=100
mkdir("test")
lk::ReentrantLock=ReentrantLock()
i::Int64=0
Threads.@threads for _i in 1:n_points
data=rand(Float64,(n_epochs,NP)) # do some calculation here
lock(lk)
i+=1
println("------------------------------------")
println("run $i, thread $(Threads.threadid()), NP $NP")
p=Plots.plot(1:n_epochs, data, legend = false)
Plots.xlabel!(p,"epoch")
Plots.ylabel!(p,"data")
Plots.savefig(p,"./test/train_$i")
println("...plotted")
unlock(lk)
end
end
main()
Использование блокировки должно быть потокобезопасным. Однако метки в виде галочки на графиках, созданных из потоков с threadid ()! = 1, неверны: example
Я делаю что-то не так, или это стоит отчета об ошибке?