Stumbled across this very problem and after some searching found the following solution:
using PythonCall
using ThreadPools
macro pythread(expr)
quote
fetch(@tspawnat 1 begin
$(esc(expr))
end)
end
end
function babel_convert(input, informat = "cdxml", outformat = "mol")
@pythread begin
ob = pyimport("openbabel.openbabel")
conv = ob.OBConversion()
conv.SetInAndOutFormats(informat, outformat)
mol = ob.OBMol()
conv.ReadString(mol, input)
if ! Bool(mol.Has2D()) && ! Bool(mol.Has3D())
pgen = ob.OBOp.FindType("gen2D")
pgen !== nothing && pgen.Do(mol)
end
pyconvert(String, conv.WriteString(mol))
end
end
PythonCall.GC.disable()
Threads.@threads for i in 1:10000
babel_convert(cdxml)
end
PythonCall.GC.enable()