Python Bytes is a weekly podcast hosted by Michael Kennedy and Brian Okken. The show is a short discussion on the headlines and noteworthy news in the Python, developer, and data science space.
#479 Talking About Types
- httpxyz one month in
- Learn concurrency - a deep dive into multithreading with Python
- pip 26.1 - lockfiles and dependency cooldowns
- Python 3.15
sentinalvalues from PEP 661 - Extras
- Joke
About the show
Sponsored by us! Support our work through:
Connect with the hosts
- Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)
- Brian: @brianokken@fosstodon.org / @brianokken.bsky.social
- Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky)
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 11am PT. Older video versions available there too.
Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
Michael #1: httpxyz one month in
- First version of httpxyz contained just the fixes to get zstd working, and the fixes to get the test suite running on python 3.14, some ‘housekeeping’ changes related to the renaming
- End of March: a compatibility shim that allows you to use httpxyz even with third-party packages that import httpx themselves, as long as you import httpxyz first.
- Importing
httpxyzautomatically registers it under thehttpxname insys.modules, see https://httpxyz.org/httpx-compatibility/
- Importing
- Fixed a WHOLE bunch of performance related issues by forking httpcore
Brian #2: Learn concurrency - a deep dive into multithreading with Python
- Nikos Vaggalis
- “Whenever you are trying to speed up code using multiple cores, always ask yourself: “Do these threads need to talk to each other right now?” If the answer is yes, it will be slow. The best parallel code splits a big job into completely isolated chunks, processes them separately, and merges the results at the finish line.”
- Good overview of thread concurrency with Python and how that’s been improved dramatically with free-threaded Python
- Defines lots of terms you come across, including “embarrassingly parallel multithreading”
- There’s a counter example that’s nice
- Start with a shared resource, a counter, and multiple threads updating it
- Attempt to fix with
threading.Lock(), which fixes it, but slows things down - Good explanation of why
- Proper fix with
concurrent.futuresand separating the work of different threads so that they can be independent and their results can be combined when they’re all finished.
Michael #3: pip 26.1 - lockfiles and dependency cooldowns
- Python 3.9 is no longer supported
- Experimental: installing from pylock files
- Dependency cooldowns (see my post about this)
- Lifting several 2020 resolver limitations
Brian #4: Python 3.15 sentinal values from PEP 661
MISSING = sentinel("MISSING")
def next_value(default: int | MISSING = MISSING):
...
if default is MISSING:
...
- Take a name str as a constructor parameter
- Intended to be compared with
isoperator, similar toNone - Sentinal objects can be used as a type, also similar to
None- and can be combined with other types with
|.
- and can be combined with other types with
- Unlike
None, sentinal values are truthy. (Elipses...are also truthy)- This seems like a strange choice. but I guess it must have made sense to someone.
- It does force you to use
isinstead of depending on False-ness, so I guess it’ll make code using sentinels more readable.
- Interesting that the PEP was started in 2021, and we’re finally getting it this year.
Extras
Brian:
- Before GitHub - Armin Ronacher
- tenacity - cross-platform multi-track audio editor/recorder
- learned about it from Armin’s article
Joke:
- Joke option Make it myself
- Seems similar to what people think about software now
Links