-
Notifications
You must be signed in to change notification settings - Fork 113
Add Interruptible Query Execution in Jupyter via KeyboardInterrupt Support #1141
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
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Simplified async handling by removing unnecessary cloning of strings and context in various methods. - Streamlined the use of `wait_for_future` to directly handle futures without intermediate variables. - Improved error handling by directly propagating results from futures. - Enhanced readability by reducing boilerplate code in methods related to reading and writing data. - Updated the `wait_for_future` function to improve signal checking and future handling.
timsaucer
reviewed
Jun 13, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is amazing!
One suggestion in two places to avoid having a panic.
@timsaucer |
timsaucer
approved these changes
Jun 16, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Which issue does this PR close?
Closes #1136
Rationale for this change
Currently, when executing long-running queries in Jupyter notebooks using DataFusion, the interrupt (Ctrl+C) mechanism does not function as expected. Users are forced to restart the kernel, causing workflow disruption and data/context loss. This PR introduces a graceful interrupt mechanism allowing rapid development iterations and better notebook UX.
What changes are included in this PR?
test_collect_interrupted
to validate interruptibility viaKeyboardInterrupt
on long-running queries.wait_for_future(py, fut)?
withwait_for_future(py, fut)??
to properly propagate nestedResult
types.wait_for_future
utility to periodically check for Python signals usingpy.check_signals()
to allow interrupt handling.wait_for_future
and associated async/await error propagation.Note that in Jupyter, you click the Stop button to interrupt a query:
Jun-04-2025.17-23-59.mp4
Are these changes tested?
✅ Yes
test_collect_interrupted
ensures interrupt behavior works reliably.Are there any user-facing changes?
✅ Yes
PyKeyError
for "No table named").