Skip to content

Ctrl-C interrupts not working inside python execution #527

Open
@axsk

Description

@axsk

Affects: PythonCall / JuliaCall

Describe the bug
Interrupting during python execution is not working properly (not even on one thread).
Keeping ctrl+c pressed interrupts the execution, but the next python call segfaults julia.
This applies to both, PythonCall and PyCall.

julia> using PyCall                                                                                                                                                                                          
                                                                                                                                                                                                             
julia> py"""                                                                                                                                                                                                 
       import time                                                                                                                                                                                           
       for i in range(100):                                                                                                                                                                                  
           time.sleep(1)"""                                                                                                                                                                                  
^C^C^C^C^C^C^C^C^C^C^CWARNING: Force throwing a SIGINT                                                                                                                                                       
^C^CERROR: InterruptException:                                                                                                                                                                               
Stacktrace:                                                                                                                                                                                                  
 [1] macro expansion                                                                                                                                                                                         
   @ ~/.julia/packages/PyCall/1gn3u/src/exception.jl:108 [inlined]                                                                                                                                           
 [2] #117                                                                                                                                                                                                    
   @ ~/.julia/packages/PyCall/1gn3u/src/pyeval.jl:38 [inlined]                                                                                                                                               
 [3] disable_sigint                                                                                                                                                                                          
   @ ./c.jl:473 [inlined]                                                                                                                                                                                    
 [4] pyeval_(s::String, globals::PyDict{String, PyObject, true}, locals::PyDict{String, PyObject, true}, input_type::Int64, fname::String)                                                                   
   @ PyCall ~/.julia/packages/PyCall/1gn3u/src/pyeval.jl:37                                                                                                                                                  
 [5] macro expansion                                                                                                                                                                                         
   @ ~/.julia/packages/PyCall/1gn3u/src/pyeval.jl:230 [inlined]                                                                                                                                              
 [6] top-level scope                                                                                                                                                                                         
   @ REPL[2]:1

julia> py"""
       import time
       for i in range(100):
           time.sleep(1)"""

[473012] signal (11.1): Segmentation fault
in expression starting at REPL[2]:1
_PyInterpreterState_GET at /usr/local/src/conda/python-3.10.14/Include/internal/pycore_pystate.h:117 [inlined]
PyUnicode_DecodeFSDefaultAndSize at /usr/local/src/conda/python-3.10.14/Objects/unicodeobject.c:4095
Py_CompileStringExFlags at /usr/local/src/conda/python-3.10.14/Python/pythonrun.c:1390
macro expansion at /home/htc/bzfsikor/.julia/packages/PyCall/1gn3u/src/exception.jl:108 [inlined]
pyeval_ at /home/htc/bzfsikor/.julia/packages/PyCall/1gn3u/src/pyeval.jl:34
julia> using PythonCall                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                             
julia> @pyexec """                                                                                                                                                                                           
              import time                                                                                                                                                                
              for i in range(100):                                                                                                                                                           
                time.sleep(1)"""                                                                                                                                                                             
                                                                                                                                                                                                             
^C^C^C^C^CWARNING: Force throwing a SIGINT                                                                                                                                                                   
^CERROR: InterruptException:                                                                                                                                                                                 
Stacktrace:                                                                                                                                                                                                  
 [1] PyObject_CallObject                                                                                                                                                                                     
   @ ~/.julia/packages/PythonCall/S5MOg/src/C/pointers.jl:297 [inlined]                                                                                                                                      
 [2] macro expansion                                                                                                                                                                                         
   @ ~/.julia/packages/PythonCall/S5MOg/src/Core/Py.jl:132 [inlined]                                                                                                                                         
 [3] pycallargs(f::Py, args::Py)                                                                                                                                                                             
   @ PythonCall.Core ~/.julia/packages/PythonCall/S5MOg/src/Core/builtins.jl:212                                                                                                                             
 [4] pycall(::Py, ::Py, ::Vararg{Py}; kwargs::@Kwargs{})                                                                                                                                                     
   @ PythonCall.Core ~/.julia/packages/PythonCall/S5MOg/src/Core/builtins.jl:230                                                                                                                             
 [5] pycall                                                                                                                                                                                                  
   @ ~/.julia/packages/PythonCall/S5MOg/src/Core/builtins.jl:220 [inlined]                                                                                                                                   
 [6] Py                                                                                                                                                                                                      
   @ ~/.julia/packages/PythonCall/S5MOg/src/Core/Py.jl:339 [inlined]                                                                                                                                         
 [7] pyexec(::Type{Nothing}, code::Py, globals::Module, locals::Tuple{})                                                                                                                                     
   @ PythonCall.Core ~/.julia/packages/PythonCall/S5MOg/src/Core/builtins.jl:1212                                                                                                                            
 [8] top-level scope                                                                                                                                                                                         
   @ ~/.julia/packages/PythonCall/S5MOg/src/Core/builtins.jl:1260                                                                                                                                            
                                                                                                                                                                                                             
julia> @pyexec """                                                                                                                                                                                           
              import time                                                                                                                                                                                           
              for i in range(100):                                                                                                                                                                   
                time.sleep(1)"""                                                                                                                                                                             
                                                                                                                                                                                                             
[472692] signal (11.1): Segmentation fault                                                                                                                                                                   
in expression starting at REPL[2]:1                                                                                                                                                                          
_PyInterpreterState_GET at /usr/local/src/conda/python-3.12.4/Include/internal/pycore_pystate.h:133 [inlined]                                                                                                
maybe_freelist_pop at /usr/local/src/conda/python-3.12.4/Objects/tupleobject.c:1133 [inlined]                                                                                                                
tuple_alloc at /usr/local/src/conda/python-3.12.4/Objects/tupleobject.c:43 [inlined]                                                                                                                         
PyTuple_New at /usr/local/src/conda/python-3.12.4/Objects/tupleobject.c:74                                                                                                                                   
PyTuple_New at /home/htc/bzfsikor/.julia/packages/PythonCall/S5MOg/src/C/pointers.jl:297 [inlined]                                                                                                           
pynulltuple at /home/htc/bzfsikor/.julia/packages/PythonCall/S5MOg/src/Core/builtins.jl:824 [inlined]

Your system
Please provide detailed information about your system:

  • Linux, Julia 1.10.4, both PyCall and PythonCall on newest versions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions