JuliaPy / PythonCall.jl

Python and Julia in harmony.
https://juliapy.github.io/PythonCall.jl/stable/
MIT License
715 stars 61 forks source link

finalizer may never be called #515

Open dpinol opened 2 days ago

dpinol commented 2 days ago

Is your feature request related to a problem? Please describe. In Julia, it looks like finalizers are always called when exiting. E.g., the following code always prints "hola".

mutable struct S
    a
end
function S()
    return finalizer(_->Core.println("hola"), S(3))
end
S()

However, if we wrap it with juliacall, the finalizer is never executed.

import juliacall
juliacall.Main.include("kk.jl")

Describe the solution you'd like I'd like finalizers to always be executed

Describe alternatives you've considered My current workaround is finishing with

juliacall.Main.GC.gc()
cjdoris commented 1 day ago

Ok yeah looks like I should call jl_atexit_hook to stop the Julia runtime when Python exits. https://github.com/JuliaLang/julia/blob/f3298ee5e2b08f633a6a313d094c732ff1ce7e85/src/init.c#L236