JuliaPy / JuliaPy/PythonCall.jl

Ctrl-C interrupts not working inside python execution

未關閉
#527 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
bug
主要語言
Julia
星號
1.1k
分支
86
平均合併
1 天 22 小時
30 天內合併 PR
3

描述

**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.

貢獻指南

這個儲存庫沒有索引到貢獻指南

研究方向

Reproduce the Ctrl-C sequence in the issue, then start with src/exception.jl and src/pyeval.jl for PyCall and src/C/pointers.jl, src/Core/Py.jl, and src/Core/builtins.jl for PythonCall. Trace the interrupt path and verify that a subsequent Python call completes without a segmentation fault.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
julia, python
領域
backend
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
需要釐清
新手友好度
30/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。