Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IPython ignores Control + C after loading Rust module built with PyO3/Maturin #4121

Open
SichangHe opened this issue Apr 25, 2024 · 3 comments
Labels

Comments

@SichangHe
Copy link

Bug Description

Posted in ipython/ipython#14417, duplicated below:


I wrote a Rust module battlesnake_gym and loaded it into the virtual environment. I ran the script below in IPython and hit Control + C after about 5 seconds, but the script was not interrupted. In fact, IPython now ignores Control + C completely. More information later.

from time import sleep
import battlesnake_gym  # This is a Rust module built with PyO3/Maturin.

for _ in range(100):
    sleep(0.1)

However, if I run this script in python the default REPL, it gets interrupted by Control + C normally. Therefore, this should have something to do with IPython, not just PyO3/Maturin.

Steps to Reproduce

I was trying to provide a minimum reproducible example, but failed with the bare PyO3 examples. Below are the rough steps to reproduce with my codebase, which would be nicer for someone who already have Rye to try out (sorry about the heavy dependencies).

# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh  ## Install Rust.
# curl -sSf https://rye-up.com/get | bash  ## Install Rye.

## Clone codebase.
git clone https://github.com/SichangHe/STATS402_course_project.git
cd STATS402_course_project
git submodule update --init

# Build Rust module.
cd battlesnake_train
rye sync

## Run IPython in the virtual environment.
# Remember to add the appropriate extension to the following command.
. .venv/bin/activate
ipython
## Below are my outputs. I hit control + C ~5sec after `In [1]`.
## Notice that there are no `KeyboardInterrupt` exceptions.
## Actually, it wasn't interrupted.
# Python 3.11.8 (main, Feb 25 2024, 04:18:18) [Clang 17.0.6 ]
# Type 'copyright', 'credits' or 'license' for more information
# IPython 8.23.0 -- An enhanced Interactive Python. Type '?' for help.
#
# In [1]: from time import sleep
#    ...: import battlesnake_gym
#    ...:
#    ...: for _ in range(100):
#    ...:     sleep(0.1)
#    ...:
# ^C
# In [2]:

Control C's search keys: control + c, ctrl c, ctrl + c, control c, ctrl c.

Backtrace

No response

Your operating system and version

Debian 6.1.38-2 (2023-07-27) x86_64 GNU/Linux

Your Python version (python --version)

Python 3.11.8

Your Rust version (rustc --version)

rustc 1.77.2 (25ef9e3d8 2024-04-09)

Your PyO3 version

0.21.2

How did you install python? Did you use a virtualenv?

I installed Python via Rye. I did use a virtualenv provided by Rye.

Additional Info

No response

@SichangHe SichangHe added the bug label Apr 25, 2024
@SichangHe SichangHe changed the title Control + C ignored after loading Rust module built with PyO3/Maturin IPython ignores Control + C after loading Rust module built with PyO3/Maturin Apr 25, 2024
@SichangHe
Copy link
Author

This may be a bug on the IPython side. Just posting it here in case someone spot something.

@adamreichold
Copy link
Member

Are you sure this is not an instance of https://pyo3.rs/v0.21.2/faq#ctrl-c-doesnt-do-anything-while-my-rust-code-is-executing?

@SichangHe
Copy link
Author

@adamreichold, I don't think so. The example I give above does not call Rust functions except when importing the module. I am pretty sure Rust code is not executing in the main thread when the for loop with sleeps are run.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants