Python Bytes - #457 Tapping into HTTP
Episode Date: November 11, 2025Topics covered in this episode: httptap 10 Smart Performance Hacks For Faster Python Code FastRTC Explore Python dependencies with pipdeptree and uv pip tree Extras Joke Watch on YouTube About th...e show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters 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 10am 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: httptap Rich-powered CLI that breaks each HTTP request into DNS, connect, TLS, wait, and transfer phases with waterfall timelines, compact summaries, or metrics-only output. Features Phase-by-phase timing – precise measurements built from httpcore trace hooks (with sane fallbacks when metal-level data is unavailable). All HTTP methods – GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS with request body support. Request body support – send JSON, XML, or any data inline or from file with automatic Content-Type detection. IPv4/IPv6 aware – the resolver and TLS inspector report both the address and its family. TLS insights – certificate CN, expiry countdown, cipher suite, and protocol version are captured automatically. Multiple output modes – rich waterfall view, compact single-line summaries, or -metrics-only for scripting. JSON export – persist full step data (including redirect chains) for later processing. Extensible – clean Protocol interfaces for DNS, TLS, timing, visualization, and export so you can plug in custom behavior. Example: Brian #2: 10 Smart Performance Hacks For Faster Python Code Dido Grigorov A few from the list Use math functions instead of operators Avoid exception handling in hot loops Use itertools for combinatorial operations - huge speedup Use bisect for sorted list operations - huge speedup Michael #3: FastRTC The Real-Time Communication Library for Python: Turn any python function into a real-time audio and video stream over WebRTC or WebSockets. Features 🗣️ Automatic Voice Detection and Turn Taking built-in, only worry about the logic for responding to the user. 💻 Automatic UI - Use the .ui.launch() method to launch the webRTC-enabled built-in Gradio UI. 🔌 Automatic WebRTC Support - Use the .mount(app) method to mount the stream on a FastAPI app and get a webRTC endpoint for your own frontend! ⚡️ Websocket Support - Use the .mount(app) method to mount the stream on a FastAPI app and get a websocket endpoint for your own frontend! 📞 Automatic Telephone Support - Use the fastphone() method of the stream to launch the application and get a free temporary phone number! 🤖 Completely customizable backend - A Stream can easily be mounted on a FastAPI app so you can easily extend it to fit your production application. See the Talk To Claude demo for an example of how to serve a custom JS frontend. Brian #4: Explore Python dependencies with <code>pipdeptree</code> and <code>uv pip tree</code> Suggested by Nicholas Carsner We have covered it, but in 2017 on episode 17. pipdeptree Use pipdeptree --python auto to allow it to read your venv uv pip tree Also check out uv pip tree and some useful flags --show-version-specifiers to show the rules --outdated notes packages that need updated Extras Brian: Lean TDD 0.1.1 includes an updated intro and another chapter, “Essential Components” VSCode Peacock Extension - color code your different projects Joke: Sure Grandma
Transcript
Discussion (0)
Hello and welcome to Python Bites, where we deliver Python news and headlines directly to your earbuds.
This is episode 457, and it's being recorded on November 11th, 2025.
And I'm Brian Ockin.
And I am Michael Kennedy.
Wow, nowhere.
Oh, it's 1111.
It's quarter-ray day.
I totally forgot to wear courteries today.
I love it.
Is that because the vertical stripes?
Yeah, yeah.
I love it.
I have no quarter area on either.
We missed the opportunity.
some stripes on your it's not corduroy but yeah your sweater yeah almost the sweater almost pulled
it off uh anyway um we'll would like to thank everybody that's that supports us through going to
doing talk python training or the pitex course patreon supporters or people that bought our books
uh we really really appreciate all of the support and it keeps us going um also love to hear from
people on loose guy on mastodon and through email so um you can go to the
contact us on on pythonbytes.fm and there's the links to all the blue sky master and all those
things to get all of us. We actually have a couple items today from listeners. So this is the feel free
to send us things. If you'd like to join the show live and even if it's on a weird time like this
week, you can find out when it's going to happen next by going to pythonbytes.fm.
slash live. And you know, jump on and talk with us while we're recording. It's fun.
Also, you don't need to take notes because we're going to send you all the links.
Well, they're in the show notes, but we're also sent them directly to your inbox if you sign up to be at front of the show and go to Pythonbyst.fm and sign up for the newsletter.
I think that's all of the stuff.
So let's jump into the first item, Michael.
Let's talk about it.
Now, I want to talk about something called HTTP tap at HTTP tap.dev.
Now, this one, it's a little bit like HTTP Pi, HCT Pi, I don't know how you really pronounce that correctly, which is my go-to, anytime I need to test something on the terminal or that sort of thing, H-T-Pi is, because, you know, it's like curl or whatever, but it gives you lots more stats, gives you more information. And this is a little bit like that. If you wanted to go into, say, your Chrome Dev tools or something, and say, I'm requesting this page or this.
this URL or this API endpoint is a little bit slow,
it's a little bit funky, what's going on?
Where's the problem?
Yeah.
If it's getting hung up, is it connecting to the server
or is it the backend app server,
like Graney and whatever, is not responding.
So that's what this is all about.
And it's built, I believe it's built with rich or textual.
I can't remember how far down the Will McGugan terrain it goes,
but it definitely is built on some of those.
Built with Python, though that's not necessarily
important, right? I guess it's easier to make improvements to, but it's more just a tool that anyone
doing web stuff with Python might be interested in. And I pulled up a little example of just asking
TopPPython, then TalkPython.fm, and it says, here's the analysis. And apparently there's only one
step, maybe if there were redirects or something. It would show multi-stage flows, but there's no
redirects. So there's not. It shows you the IP address, the TLS version, the cipher, when the certificate
it expires, the status, the size, the server, gets all of that stuff right, which is pretty
cool.
Then it has this waterfall tiered sort of diagram.
It says the request timeline.
It took 29 milliseconds for DNS to figure out where the heck that was.
I've been on vacation.
I haven't been going to the website, so I had to go get it from the internet.
And then it took 80 milliseconds to connect to the server.
By the way, it's about 80 milliseconds ping time.
So you've got to keep that in mind when all these numbers, right?
like that's East Coast, West Coast, U.S., 2,500 miles.
So connect 80 milliseconds.
TLS took 130 milliseconds.
So if you ever see your browser doing like Keep Alive type of stuff,
you know, that's a big savings right there.
It's almost 200 milliseconds savings if it doesn't have to keep doing that over and over, right?
So that's pretty nice.
And then you can see it's actually sending the request and waiting for the response.
So goes out, comes back, takes 170 milliseconds.
Right, again, ping time in there as well.
And then the transfer is a whopping 4.3 milliseconds.
So this is pretty cool, like a really quick view of just seeing what's going on, right, Brian?
Yeah, that's actually, I love that.
Very useful, especially if you've got some lag issues or some part of your website that's a little slow.
You can look at what's going on.
Is it DNS?
Is it the transfer?
Where's this delay coming from?
I mean, it's not super fine grain, but this is pretty good.
Yeah, well, there's just, yeah, for sure.
And there's a lot of stuff involved, right?
There's, like you said, the DNS might be taking forever,
which could be part of the problem or who knows, right?
There's just a lot of things.
So really neat to see this little UI built in Python.
Yeah, and I guess we have to say it.
It's always DNS.
It's always TNS.
It's not always DNS, but yeah.
Anyway.
Yeah, but often.
Often.
No, I think this is great.
This is cool.
I've got actually some side projects
that I've got some weird speed issues
and I don't know why
and even just like looking at some of the stuff
help out to figure out where to start debugging.
Yeah, you can get some of these types of things
in the dev tools and browsers
but this is really nice.
It's visual, it's colorful, it's graphical.
I love it.
I like it.
And it's command line.
Yay, we love command line.
Yay.
Okay.
I'm not usually, I have to admit,
I click on listicles all the time.
But we don't cover very many listicles on the show,
but I'm going to cover one today.
I actually,
oh, my aspect ratio is off.
There we go.
Here we go.
This is from Pi Charm.
It's actually from Evgenia Verbena.
That's a cool name.
10 smart performance hacks for 10 smart performance hacks for faster Python code.
And there's some that,
well, actually,
I think stuff like this is really good to talk to people about because we don't really think about
performance too much. I mean, when you're starting Python, you don't think about it too much.
It's hopefully, and hopefully you don't. We don't want people to prematurely optimize,
but there's some just some thing habits that maybe are decent to get into that avoid problems
later on. And so that's one of the reasons why I like going through this.
Oh, nice, nice menu on the right side. Also with all the hacks on the
Right. Anyway, the first one, not too surprising, if you've done through any like, like, you know, leak code stuff or whatever is leverage set for membership testing.
So if you've got a big list, you can throw the list into a set and then you can find out easily if it's, if something's in the list by putting it in a set.
And oddly, that speeds things up quite a bit, like, drastically.
List of Lookup versus Set Lookup is super fast.
Same for dictionaries, too.
Like, if you're looking up by some kind of key, either one, it's ridiculous.
Yeah.
Like I said, some not too surprising.
Slots are great if you're going to use classes or data classes even.
If it's not going to grow over time, you can define slots and stuff.
and then the look up for each element within a data class is a lot faster with slots.
I want to jump around because there were some that I didn't really realize that I just didn't think about before.
One of them is use math functions instead of operators.
And I guess I wouldn't.
Some of these are weird.
So math.
Squirt for square root is faster and more accurate than raising a number to the power.
of zero point five using exponentation operator i wouldn't do that anyway because that's weird it just
looks weird and it's bad i don't know bad code style but but there's a whole bunch of others similarly
the sign function exponent log those are really fast operators in math so go ahead and utilize
math and uh so that's that's a good pointer pre-allocate memory with known sizes now this is some
like an old trick that i think that i didn't really think that it was a huge difference and it looks like
One of the things that's, it's cool in this article, it does the preallocated time versus or the
before and after times.
So there's a bit of, you know, 0.01 second speed up.
But so the trick is just to, I guess, have an array with, if you're going to put, if you're
going to fill an array anyway, may as well just fill it with some zeros or something
initially.
And then, and it seems like a waste of time to fill it with zeros because you're going to fill
everything up, but it isn't because it's the allocation that takes a little bit long.
longer than the affiliate was zeros.
Yeah, and Brian, it's worth thinking through
how that goes a little bit, because if you just go append,
append, append, and this is something I don't do,
and it's inspiring me to consider like, well, maybe I should.
But the rate doesn't know if you're going to put a million
items in there.
Every time you do like a rate out of penned or list out of pen,
it doesn't go, guess what?
We're going to add a million, right?
It's like, well, what about 16?
What about 32 of them?
Oh, now we need more.
Okay, what about 64 of them?
You know, it just, it has to keep reallocating
copying as you build this up so yeah and i don't remember how i mean it's a little smarter than that so
i think it like does like doubles it in size or takes a chunk i can't remember what it does yeah it's
not allocating everyone right it's got an out right or heuristic but if you already know how
how big it's going to be you can just tell it to do it once which is cool but i don't really
think about that too much the um the a couple of the ones down below i really wanted to cover one
this was a avoid exception handling in hot loops and i am guilty of this too because i try to have
my exception handling as close to the place where it can go wrong as possible just as it's a
visual thing and a code readability thing to have this tight um have the try right around that like
the example as a zero division error has the try and accepter right there um however uh that might
It might slay down a little bit.
And it did, in this case, where's the try and accept on this one?
It's just not there.
I think the top one versus the bottom one.
Yeah, but there's no try and accept at the top.
That's the baseline.
Oh, okay.
The conditional check versus.
It's like checking for the condition that would cause the exception to avoid the exception.
Oh, okay.
I guess I would just put the try and accept at the top around the larger one as a better comparison.
Anyway.
Yeah, I agree, but this is a big one.
But that's a big one.
Then we get into some really, except there's exception handling, using iter tools for combinatorial operations.
And this is huge.
If you, if you're working with chunks of lists or chunks of and stuff, using iter tools and knowing what's in there, it speeds up a huge amount.
So using iter tools versus loops for, I forget what the example is here, but the speed up is,
it's using product and the speed up is massive from you know like what four 40 times bigger or something
uh four divided by oh five to by 20 that's four so it's four times speed up um math is hard uh bisect also
a great thing to look to to look at and uh yeah anyway just some some cool wow that's a that's a
massive speed up a hundred times speed up um for using bisect in the right places so uh finding out where
places where you can use bisect or iter tools and just knowing that those are there to look them up
these are good speedups anyway occasionally it's good to think about how fast is my code going you know
i think we could summarize up that article um by basically say know the standard library know your data
structures mostly yeah you use dix use it or tools etc um the and the standard library is still
pretty big i would probably limit that to the standard library that that manipulates
data structures. Yeah, yeah, it kind of intersect with data structures. Yeah, I guess that's
kind of what I was getting at. And by the way, this was written by Dito Grigorov and posted by
Uvigena. Oh, okay. Just want to make sure Dito gets a little credit for writing it.
Thanks for that clarification. Yeah, no worries. It's tricky. I think it's because the way
the Jet Brain CMS works. Yeah, so cool, cool. Well, maybe we should, you know, Brian,
maybe we should talk to them about it. Put them up on a little video call, you know what I mean?
What do you think? Do a little web RTC?
I've kind of forgot about RTC.
I know, but you and I are sitting here, people don't necessarily know how we're doing this.
It's magic.
We basically, you and I, we speak through magic.
But some of that magic is WebRTC because all of this is recording, streaming, et cetera, video and voice,
multiple channels, multiple screens, and so on, over WebRTC in the browser, which is ridiculous.
It's just ridiculous that this works.
So I want to talk about a library from Freddie Bolton, who is behind the Gradio project.
Gradio, Gradio, Gradio probably project, and I had him on Talk Python a couple years ago.
And this is called FastRTC.
So kind of like, hey, I'm a fan of integrating with Fast API.
And I want to do WebRTC.
It's kind of ridiculous how simple some of these things are.
So it's pretty popular.
It's got 4,000 GitHub Stars, 400 Forks.
It's been around for a while.
Freddie pointing this out to me a decent while ago,
and I finally didn't get around to talk about it.
But it's quite neat.
There's a little video you can watch about how to do it,
but it's got some examples for you.
Like, if you want to do an echo audio,
which is kind of a sadistic example, you know what I mean?
Because that's usually the worst thing about a video meeting,
it's the echo.
But if you want to listen to you hear yourself echo back
just to prove that it's going round and round,
then how many lines is that?
I mean, there's a huge comment in there,
but if you take out the comma and you format it a little bit wider,
it's probably five lines of code to set up a server,
connect to it, and echo back.
Like, that's, that's insane.
Insane.
And there's also ways to set up LLM voice chat if you care about that.
You know, that's obviously the thing to jour is I want to talk to my LLM,
but you could do that pretty, pretty easily, pretty quickly here.
But also just stream your webcam back or object detection.
It's just like handful lines of code.
It's insane, but this stuff seems so complicated, doesn't it, right?
It's cool.
It's cool.
You're wrapping stuff up in a library.
Yeah, so it comes with automatic voice detection.
Turn-taking built-in, which is interesting.
It's got a UI to launch it in built-in, built-in Radio UI, if you want to do that.
I believe that's probably JavaScript.
Automatic WebRTC support.
So mount it onto a fast API app and get a WebRTC endpoint for your own friend.
So you can kind of go Gradio or you can go this way.
It's got WebSocket support.
Listen to this automatic telephone support.
Use fast phone on the stream and get your own temporary phone number.
Actually, that's pretty cool.
Yeah.
So, yeah, there's a lot of stuff going on here.
It says you can easily be mounted on your own Fast API app and customize it entirely.
Extend it to fit within your production app, I guess, assuming that's a Fast API app.
Although you could certainly squeeze it in using like InVi app.
engine X routes to make it look like one app,
but it's not exactly the same backend and so on.
So there's examples for that.
Yeah.
So I thought it was pretty cool.
That's pretty neat.
I interviewed somebody in like three years ago, 2012,
about WebRTC.
They were doing a, wrote a book on it.
Nice.
I thought, like, I don't think I'd ever use that.
But of course, I use tools that use WebRTC all the time.
So like you said, we're using it for.
We're using it right now.
We're using it right now.
And yeah, it's one of those things.
it's like, I don't think I'll ever build one of those, like, oh, and then you're like,
oh, but what if I could do it for this project or something comes up or, you know, just knowing
about it as a, I think it's, yeah, and right now, like, like you said, with, with things like,
hooking up LLMs to, you know, some vibe coding.
Yeah, exactly.
I mean, no comment.
No comment.
Okay, so this is a listener's suggestion, actually.
comes to us as a request from Nicholas Carsoner.
He said, hey, I'm using Pip Debtree a lot lately.
And it's pretty cool, have you covered that?
And I'm like, yeah, we covered it.
But I looked it up.
It was, I should have had the episode up.
But we covered it in episode 17.
That was what, 2017.
So yeah, it was a minute ago that we've covered it.
So it's totally fine to cover it again.
because there's been changes.
So I did want to talk about both PIPDEPTree,
but also I have been,
I used PIPDEPTree for a long time,
but now usually I use UV PIPTree.
And so I just decided to write an article on it
just because I wanted to show some code examples.
One of the cool things I did not know that PIP Deptree did,
one of the things that I would always do is I'd have a project,
install PIPDepTree.
And what it does is when you run it,
it looks at all the stuff you have installed
and then shows them,
it's kind of like PIPList,
but it shows all the,
it's like a tree structure and it shows them
like in a tree structure with what versions
that are installed and it's extra information.
Like if I'm using it from piproject.tomel,
I have an example of the Cards project,
why it chose the particular version that's installed.
So it's pretty handy.
But I would always install it in the project
and it would also tell me,
that PIP Deptree is installed.
But the trick is to install it somewhere globally,
like either using UVX PIPDepTree or UV tool install PIPDeptry,
and then you've got it just available to you always.
And then you can use Python Auto,
and the Python Auto flag will tell you,
it will look in the current environment that you're in.
So then you can have it in global,
and then just look at,
whatever project you're in, which is cool.
I didn't know it could do the auto thing, too.
So I'm glad I looked that up.
But what I'm using usually is UV PIPTree,
because it's already installed with UV,
and I have UV everywhere now.
By default, I wanted to go through a couple flags that I,
actually I just learned about this.
When I was out, I was comparing this,
if you do UV PIPTree,
it'll show you a tree structure,
but it only shows you the versions that are installed.
And it does do, like, for instance,
I'm showing cards and rich,
is showing up. And it looks like it's in a couple places. Package tree already displayed.
Rich. Oh, yeah, because the cards project depends on Rich, but it also depends on Typer, which
also depends on Rich. So Rich is duplicated, and there's a little note that says that. There's a
flag where you can turn it off, but I kind of like seeing the duplication. It's just to see
who all is using something. Now, to get a similar look as PIP Deptree, you can add show version
specifiers and then it shows you the rules that it used to figure out what what to install but the
new flag that i just learned about which i'm super excited about is dash dash outdated and this tells you
it tells you it it throws the latest up it looks at all the things you got installed and tells you
if there's newer ones so you can go into your project and you can run uvipip tree outdated and it'll tell
you what which ones you should maybe update so it's pretty fun both of those so i like both tools
That's nice. I do as well. I've used PIPDepTree for a long time. It's nice to just go, why is this here? Why is click installed? I don't remember installing click. You know, it's fine, but I just don't remember installing it, right? And, but oh, it's icy because I installed typeer, and I forgot the type is a wrapper on click. Whatever.
Yeah, and one of the things, like, for instance, on that, I'm thinking about update, like a hypothetical scenario, I've got Rich, or I've got on my cards application, I'm using Rich, but maybe, maybe, maybe,
maybe I'll try to like, you know, tighten the dependencies by not using Rich.
But if I'm using Typer, it's going to come in anyway.
So it's kind of, I like to see the duplication because I'm not going to save anything.
If I don't depend on Rich directly, it's already there because of Typer.
So.
Yes, exactly.
You're like, can't.
Can I just get rid of this thing?
You're like, nope.
No.
Not easily, not directly anyway.
Yeah.
But if I got rid of Typer also somehow and then I could get rid of Rich.
And maybe I'll like redo the TinyDB too.
Yeah.
Anyway, tighten it up.
All right.
Those are, that's my items to talk about.
Oh, I do have links to both PIPTrap Tree and UVTree Rich.
UV PipTree Rich also.
Those are all different words.
Nice.
All right, well, just keep going.
You're the only one of extras today.
Okay, I got a couple extras.
I've got one of the benefits of working at the office, like the back to office thing,
is I was walking by one of my colleagues and he's got a bunch of colors.
up on its screen. And I'm like, what are those colors? And I use VS code at work. And I've often got
different projects up. The same thing. He's using, and I started using this just like last week,
a thing called Peacock. And what it does is it shows different colors around the outside of your
terminal. And it only is, or outside of your VS code window. But the colors are picked and stored in the
project or like the workspace yeah the workspace so that if you've got different
projects open they all have different colors so when you're like what what I'm I want to
go back to that window you just have to remember which color goes to which project
and that's kind of up to you but oh oh Brian I might have to install this I in
even if you one of the cool things is I'm like well what the I chose green and it's a
little too bright for me I kind of want a darker green green it has built-in buttons
to just go a little darker little darker little darker or a little lighter you can you can do
custom like pick your own color but you can also say this is close but i'd like it a little darker
in it i'm loving that yeah and it's not incredibly popular but it looks like it's from john papa who's
been around in the tech space for a long time so seems trustworthy where do you where do you see the
popularity is it in here it's the downloads oh i take it back i thought it was it may have more than i
initially said it has three point basically four million downloads okay so
Actually, there's a few downloads.
People like this idea.
I was looking at the open VSX marketplace,
which is like similar, but not the same.
The other update,
so one of the things I mentioned last week
is that I'm writing a book again.
And I just updated this last night,
I think last night.
There's another chapter written.
So I've got to clean this up.
Both versions are here.
But I did essential components for successful software projects.
So I got that one up.
And I completely rewrote the introduction, and I should stop doing that.
I have an editor a long time ago told me, do a quick introduction, and then leave it alone until you finish the book.
And then you can update it to be what the book actually is.
And so I've got to do that.
100%.
I think that's a great idea about the introduction.
I do it with my courses sometimes.
I'll record the whole course, and then I'll record the introduction because I'm like, I want to be able to say,
and we're going to cover this in this section, and then actually have that match.
Yeah, but my brain won't let me go on if I don't write an introduction to start with.
It's like, but I haven't done an introduction, man.
And I know it.
The Essential Components chapter, this was tough, man, because there's like, I needed it to be tight
or I wanted it to be a tight chapter, but I rewrote it like five times because I had so
many stories and stuff I wanted to throw in and I decided to take the stories out and
leave those stories as blog posts later after I get.
But, oh, I guess the third extra, I don't have anything to show for this.
But when I'm writing and I've got all this great stuff that I want to save,
but I know it shouldn't be in this chapter or it shouldn't be in this blog post.
I've decided for my editor, I've got a file called Cut Bucket, like C-U-T bucket.
And I just put a divider line, put another title, and paste the stuff I want to save there.
And then I don't.
And then my brain, it's a brain trick is, oh, I haven't thrown it away.
It's there.
You don't have to remember it and move on with writing.
Yeah, awesome tricks.
What's your editor that you're writing in?
Like, if you're marked down, what is this story?
Oh, yeah, it's marked down in VS code.
And this, so the Pytest book had tons of code snippets and everything.
This is, I think this is going to be a code snippet free book so that I can,
the goal is to do an audio version later.
And, you know, I might have some code snippets, but probably not.
Like that, actually, it's one of the things of reading the tester of an development book
from the old, the OG one from Kent Beck.
It's all in Java, I think, and it's like too much.
You're lucky it's not small talk.
Well, right.
Maybe it is small talk.
I don't know.
I think it's, I don't remember.
But I just sort of scammed by the code snippets because I'm like, I don't care.
I'm just like here for the concepts.
So I'm trying to keep this book, the concepts and not the code because the code is different for everybody, man.
Absolutely.
Anyway, that's all I got.
All right.
Well, let's tell a joke.
then and close it out.
Okay.
I've done a few AI once.
It's not an AI joke, folks.
So if you're tired of the AI jokes, well, then don't worry.
This is a joke about the future of Python and people being stuck in their ways
or having assumptions about Python not being as fast as it could be or having limitations
that it doesn't have anymore theoretically or semi-theoretically, whatever.
And it's a woman and a walker.
you know probably 70 or so with the granddaughter helping her back to you know sit down or something
it says so i think i named what did i what did i name the the project the the joke here i think
i called it okay grandma is the joke so honey do you know that the gill prevents multiple
python threads from executing parallelly sure grandma let's get you back to bed
A good of a testament to Python 314 and Python T and 330 Python and all that.
That's funny.
I can just like fast forward.
I can imagine like me 10 years from now telling the kids, you know, when I was a kid,
we had a gill.
We had one thread at a time.
Your little whippersnappers don't know how good you got it.
My Python used to just run interpreted and it was so slow we would debate whether it was fast enough.
yeah anyway that's what i got for a joke for i like it yeah all right it worked for me i liked it
so nice all right well uh thanks everybody for joining and listening and we love you all and um
we'll talk to you next week yeah thanks brian thanks everyone
