I have a potentially stupid question:
Is it possible to use pycall / pyplot from several threads at the same time?
I would guess it is not, but I want to be sure… (I could imagine having a python instance per thread so that this could work?)
Anyways, this code (where I try to save existing figures in parallel)
using PyPlot
pygui(true)
figs=[]
for index in 1:10
fig = plt.figure()
plt.plot(rand(10))
push!(figs,fig)
end
Threads.@threads for index in 1:length(figs)
println("Thread #"*string(Threads.threadid())*" saves image "*string(index))
fig = figs[index]
fig.savefig("image_"*string(index)*".png")
end
throws an exception:
Fatal Python error: GC object already tracked
Thread 0x00001018 (most recent call first):
Is there a way around this?
It appears unrelated to file I/O, also happens if I try to manipulate a figure from threads.
(Of course, in my real example the saving of the figures takes at least 10s of seconds, otherwise I wouldnt care…)