gh-133982: Test _pyio.BytesIO in free-threaded tests #136218
Merged
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.
The test was only checking one of the two I/O implementations. Ideally the two implementations should match behavior (and guarantees) in free-threaded Python.
Followed https://py-free-threading.github.io/porting/#general-considerations-for-porting as a general guide for "make multi-threaded safe". I have a general project to build benchmarks around I/O in my backlog (python/pyperformance#399) where I will likely work on optimizing
_io
/_pyio
/_experimentalio
performance down the line including in threaded contexts. For now though, goal is simple functional thread safety iterating to better._pyio.BytesIO
has two parts to its state,_pos
and_buffer
that get updated independently at times (ex.seek
just changes_pos
) but often together (ex.write
updates_pos
, maybe extends_buffer
, and copies data into_buffer
). When updated together multiple threads simultaneously operating could cause issues, so introduced a lockself._lock
to cover those cases.