Как построить график в несколько потоков? - PullRequest
2 голосов
/ 25 мая 2020

У меня возникла проблема с созданием графиков в @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

Я делаю что-то не так, или это стоит отчета об ошибке?

...