您好,欢迎收听 Python Bytes,我们将直接为您带来 Python 新闻和头条新闻。这是第 436 集。
录制于 2025 年 6 月 16 日。我是 Michael Kennedy。我是 Brian Ocken。本期节目由 Propel Auth 赞助播出。我们要感谢 Propel Auth 对节目的赞助。稍后我会详细介绍他们,但简而言之,如果您需要在您的
应用程序中进行身份验证。这可能是一件非常麻烦的事情。这不是您应用程序的核心业务。看看他们吧。他们会为您解决这个问题,让您可以回到构建您应该构建的内容上。说到应该做的事情,您应该在某种社交媒体上关注我们,您觉得呢,Brian?因此,我们在节目说明的顶部列出了我们的社交媒体链接。在那里查看一下。我们进行现场直播。如果您想在我们录制节目时成为节目的一部分,我们会启动开关并在大约 10:30 开始直播。
太平洋时间上午 10 点,所有旧版本也在那里。最后,如果您想要一份非常好的详细的电子邮件摘要,其中包含有关我们讨论内容的额外信息和背景细节,请成为节目的朋友,注册我们的邮件列表。我们不会在这里向您发送垃圾邮件或转售您,可以肯定的是。只是为了向您发送有关我们在节目中介绍的内容的说明,也许是关于新课程或某些事件之类的非常罕见的公告。但如果您在那里注册,我们将不胜感激。
同样,Brian,我一直对进行多线程编程的能力印象深刻。我在其他语言和平台上都喜欢它,在那里它功能齐全,所以当 Python 的自由线程出现时,我非常兴奋。但在 3.13 中它只部分出现,不是吗?比如,部分地,或者带有警告。是的,让我们看看。我们开始了。所以,
那是什么?PEP 703。无论如何,我不记得我们有自由线程作为选项(可以打开)的 PEP 了。但现在有一个公告。令人兴奋的消息。我在社交媒体上看到了这个,来自 Hugo von Kaminad。
令人兴奋的消息,PEP 779,即 Python 自由线程的支持状态标准已被接受,这意味着
这意味着 Python 自由线程现在是一个受支持的构建。这意味着他们将删除实验性标签,因此对于 3.14 beta 三(周二发布),它将不再是实验性的。所以这实际上意味着我们已经准备好支持它了。实际上,我不太确定这到底意味着什么。因此,我跳转到 Hugo 链接的讨论,
而且我的链接可能不对。因此,此讨论,我们开始了,是关于
讨论指导委员会批准 779,其效果是删除实验性标签。然后有很多细节说明这一切对第二阶段意味着什么。第二阶段有很多事情要做,例如确保实验项目的 API ABI 兼容性要求,一些,一些,
性能和内存防护栏,我们之前讨论过这些。我喜欢这一点,有一节介绍了在完全全力以赴之前需要具备哪些文档。我们需要确保文档编写清晰并得到维护。
需要一些高级并发原语和一些基准测试要求。如果您向下翻到最后,它说我们相信该项目正走在正确的道路上,我们感谢所有致力于使自由线程能够在整个 Python 社区中得到更广泛采用的工作人员的持续奉献。所以还有很多工作要做,我不太确定还有多少工作要做。所以,你知道,我问了一些人,
所以我们得到了这样的回应:嘿,这是否意味着我们将成为默认值?我知道答案不会很快。但我希望有人比我更核心的人来回答这个问题。Thomas Wooters 说,基本上,在它真正成为默认值之前还需要几年时间。实际上,我们怎么说默认值?它是,它是
它至少需要几年时间,由于稳定的 ABI 支持要求,它不可能在 3.16 之前发生。而且可能需要更长时间。所以,默认值实际上是一个模糊的概念。Thomas 给出了很好的答案。谢谢。但这令人鼓舞。我很高兴沿着自由线程的道路前进。是的。
我也是。对于这种事情,你必须放慢速度,因为它是一个如此巨大的变化,尤其是在较低级别。参见 API 和集成,就像您谈论的那样。是的。
但我对此非常兴奋。我认为它带来了许多非常有趣的机会。例如,现在,如果我编写 Python 代码并且我没有做一些显式的事情,例如多处理,我可以获得 10% 的计算资源,这非常低。因此,能够简单地说并行运行并实际使其正常运行而无需受到
你知道,序列化到多个进程的约束真的很酷。这就是一些文档需求所在的地方。也许这些文档已经存在,但我只是不知道它们在哪里。但是,如果我想让我的项目,例如,
例如,假设我希望我的项目支持自由线程。这意味着什么?我需要注意什么?我的意思是,我显然需要检查我的所有依赖项以确保它们在该依赖项上进行了测试。但我需要测试什么?诸如此类的事情。这些都很好。
好的文档。是的。我怀疑如果您使用的是纯 Python,则非常简单。总是担心您正在做的事情需要是线程安全的,对吧?我认为人们在编程中普遍忽略了 Python。他们没有充分考虑诸如
例如线程安全方面,甚至错误处理某种一致性类型的东西。例如,我做了三步,出现了一个错误,但第四步需要将其恢复到一致状态。我抓住了错误。没关系。不,没关系。它真的坏了。所以有很多这样的情况。我认为您可能需要考虑,如果您正在执行多行 Python 操作,则可能需要一个锁语句。但是,
但是我们会看到结果,我们也真的希望 Python 对人们来说非常容易上手,我的意思是人们正在用 10 行代码构建网络爬虫之类的东西,是的,嗯,
我们不想失去这种易用性。是的。是的,我完全同意这一点。我认为复杂性在于库而不是您的应用程序,对吧?因为在您的应用程序中,您可以决定,好吧,我不进行线程处理,所以问题解决了。但是作为库开发人员,您不能决定,除非只是说它不起作用,否则您无法决定您的库是否在多线程环境中使用。因此,我认为简单地将脚本组合在一起的用例
因此,Kishan 在那里说:“现在使用自由线程版本时,我们需要在 Python 中使用锁吗?”我认为是的,也许吧,但只有当您正在执行多线程代码时。但您可能之前也需要这样做,因为存在多行一致性问题,对吧?即使每一行都可能自行运行,例如这五块,也不能保证它会作为一个块运行。无论如何。
比我们必要讨论的细节多得多,但这将很有趣。而且我想这些对话会随着默认设置的出现而再次出现。如果您想尝试一下,UV 使其变得非常简单。UV,使用 Python 创建虚拟环境,只需说 VV,我认为 3.13.5T 就可以了。虽然我没有尝试过,没有。
我没有尝试过。好吧,是的,但基本上肯定是 3.14T,希望如此。是的。显然我们应该早点尝试这个。所以我们会对此进行回复。是的,就是这样。我们会解决的。我们会解决的。说到解决问题,我要在这里解决什么问题?所以让我们谈谈,实际上我还有另一件关于异步和线程的事情要稍后讨论。我的意思是,让我们先谈谈这个。让我们改变一下顺序。看,砰!我们可以现场做。所以我想谈谈 PyLeak。
P-Y-L-E-A-K。就像内存泄漏一样,但它不是检查内存泄漏,而是检查异步 IO 任务、线程和事件循环泄漏。好的。对吧?所以如果我运行,如果我调用一个异步函数,我认为它是同步的,但我没有像将其分配给变量或等待之类的调用它,这只会创建协程,并且未执行的协程只会在那里停留直到它被清理。
它实际上并没有运行该操作,对吧?是的。不好。这就是这个库的用途。它用于检测这些类型的事情。所以让我们来看一些例子。所以你可以做……
上下文管理器,你可以说 async with no task leaks。然后,如果您在该上下文块的执行过程中某个地方执行此操作,如果您这样做并且以某种方式调用异步函数,但您没有等待它,例如,在这里他们说 async IO dot create task 给定一个 sleep 将显示为错误。它可以是警告或异常。如果您希望它像中断构建和测试一样,您可以说 treat as
errors,它会说,看,您调用了此函数但没有等待它。将此与您刚才谈论的内容联系起来,Brian,您可以说 with no thread leaks。如果您创建了一个线程并启动它,但您没有将其作为变量保留,那么
它会告诉您,嘿,您不再控制此线程了。这可能是个问题,对吧?所以基本上,我想它可能是在上下文管理器另一侧运行的线程。我不太确定。您也可以对事件循环阻塞执行此操作,对吧?事件循环是 async IO 事件循环,对吧?所以这个实际上非常有趣。如果您在 async IO 事件循环中执行阻塞工作,那么它本身应该是 async IO 事件。
感知的,对吧?如果我打电话……
某种外部服务的 HTTP 端点,我可能应该使用 HTTPX 的异步客户端,而不是 request get,这意味着它基本上表示我正在执行 IO 操作,但它被阻塞了,因为我没有使用它的 AIO 本机版本,对吧?因此,这里的示例是,如果您在检查无阻塞时调用 time.sleep,则这是一个错误,因为您应该使用 AIO.sleep,它
您等待并允许同时执行其他工作,对吧?所以它基本上阻塞了所有并发进程中的整个 AIO 处理。
上下文。它们不是线程,而是,对。可以并排运行的东西,它会阻塞它。所以这会检测到它。这真的很酷。是的。这是一个非常简洁的库。还有很多东西。您可以将其用作装饰器。您可以获得详细的堆栈跟踪。它会向您显示此处发生的事情的详细信息。例如,在此示例的第 9 行有一个名为 task two 的泄漏任务。它向您展示了发生的事情的代码。所以……
等等。这里有很多不同的东西。我不想说得太详细。我已经说了很多了。但这不仅仅是一件事。这是一个相当全面的库,我喜欢它。我很喜欢。我联系了粗略的人员,并说如果您能够检测到何时调用了未等待的异步函数,那就太好了。
他们说,这听起来确实很棒。我们有或正在考虑它,但这很难做到。所以,你知道,也许你可以把它作为一个额外的东西加进去,设置错误版本,然后运行 PyTest,看看会发生什么,你知道吗?是的。所以看到,我只是很好奇你会如何使用它。我会期待……
尤其是在您构建应用程序时,尤其是在可能一直如此,但也许是您第一次进行异步应用程序时,只是为了确保您做对了,在您的代码中添加一些这些装饰器。一旦您准备好生产环境,您会删除这些东西还是保留它们以……
我认为我可能会将其放入单元测试中,但将其从生产环境中删除。好的。可能是我会做的。这个真正有帮助的领域是,在您创建新项目时它很有帮助,但是当您创建新项目时,您处于我要调用函数的心态。哦,它是异步的。除非您在即兴编码,否则您正在积极处理该代码,所有赌注都无效。但是如果您真的在处理它,
那么您就像在流程中,您的编辑器理想情况下会向您发出关于这些事情的小警告。但是,这真正有帮助的是,如果您将同步情况转换为异步情况。例如,当我将 TalkPython 代码从同步金字塔转换为异步法院(基本上是异步烧瓶)时,我犯了一些错误,因为代码太多了。
并且所有这些函数都被调用,您查看代码,它看起来不错,但是如果您将该函数从同步转换为异步,但您忘记查找使用它的每个位置并添加等待,
那么就会发生这种情况。所以它,在……中会发生什么?它无论如何都能工作吗?只是速度慢还是会发生什么?对于线程来说,它可能无论如何都能工作,但对于异步来说,异步任务来说,可能不行,因为如果您不等待它,它实际上不会执行。
是的。对。您创建了协程,但是实际上是等待它才能使其运行。因此,如果您说像异步记录此消息一样,但您没有等待它,它将永远不会记录它。对。也许如果您调用 create task,它可能会启动。我不知道。它可能有不同的执行方式,但是。不,但这很好,我觉得这是一个,就像脚手架或辅助轮之类的东西,可以放在东西上,以确保事情运行正确。这是,
这是好的。是的,绝对是,绝对是好的。酷。还有什么好的?您不必处理的身份验证很好。哦,是的,确实如此。所以,呃,
关于这一点,我们要感谢 PropelAuth。本期节目由 PropelAuth 赞助。PropelAuth 是将身份验证转化为优势的最简单方法。对于 B2B SaaS 公司来说,出色的身份验证是不可谈判的,但它通常很麻烦。使用 PropelAuth,它不仅仅是功能性的,它功能强大。PropelAuth 附带诸如托管 UI、企业 SSO、强大的用户管理功能和可操作的见解之类的工具。随着您的产品发展,
PropelAuth 会随之适应,支持更高级的身份验证功能。最好的部分是什么?PropelAuth 原生支持主要的 Python 库,如 FastAPI、Flask 和 Django。您可以轻松地将它们集成到您的产品中。
身份验证毫不费力。您的团队可以专注于扩展,而不是故障排除。这意味着更多版本、更满意的客户和业务的更多增长。立即查看它们以开始使用。链接位于您的播客播放器的节目说明中。当您听到此段时,它是一个可点击的章节 URL,并且位于 pythonbytes.fm 的剧集页面顶部。感谢 PropelAuth 对 Python Bytes 的支持。
是的,确实如此。谢谢,PropelAuth。我想指出,Brian,所有章节都是可点击的。我不知道每个人是否都知道我们的大多数剧集都有章节。如果没有,通常是因为我忘记了,但情况并非如此。但是那里的每一项……
章节也是指向任何内容的主要资源的链接。例如,PyLeak 将链接到 PyLeak GitHub 存储库(如果您点击它)。我不喜欢人们跳过我们,但是,我的意思是,如果我们正在讨论您真的不关心的主题,我理解这一点,这是章节标记的酷事之一。您可以跳到下一个主题或其他内容。是的,或者如果您已经听过四次了,您会说,是的,这是我第七次听到这个库了。如果您愿意,您可以跳过它。我的意思是,节目很短,但是仍然。
尽管如此,尽管如此。好了。让我们谈谈我本来要先谈论但推迟的事情,那就是 typed FFmpeg。好的。所以我不知道大家是否知道,但是 FFmpeg 是一个命令行 CLI 视频处理杰作。它是一个强大的库。它实际上是我用于 TalkPython 培训课程来生成所有
例如所有这些不同的版本、分辨率和流媒体样式等等。而且你知道,如果我们有一个,比如说五小时的课程,可能会让 FFmpeg 在视频上运行,我不知道,15、20 个小时,诸如此类。只是让它在我的 Apple 硅片上运行。我有一堆自动化来实现这一点,这很酷。如果这个存在,可能会更容易。
因此,这个 typed FFmpeg 是一个 Python 包装器,它支持使用 FFmpeg 的过滤器和类型。所以很简洁。它有点像 PyLeak。它比您想象的更全面。因此,这个提供了现代的 Pythonic 接口来使用 FFmpeg,为具有图片的复杂过滤器提供广泛的支持。它受到 FFmpeg-Python 的启发,但这个用 PyLeak 增强了该功能。
使用自动完成、全面的类型信息、JSON 序列化等等。因此,如果您查看存储库,他们会向您展示,如果您键入 ffmpeg.input。然后会出现一大堆带有惊人文档和类型信息的内容。我的意思是,看看这个,Brian。那很好,对吧?是的,确实如此。是的,我真的很惊讶。所以它没有依赖项。
全面的过滤器支持,强大的类型。你知道,这基本上就是它的重点。图形可视化,我刚才谈到过,暗示了部分评估。
评估、媒体文件分析和许多其他功能。易于使用。它向您展示了如何,如果您想水平翻转视频然后输出它,您可以看到输入的小图形,然后它应用所有操作。图形中有一个 H flip 操作,然后有一个输出到文件的操作。你越来越多了。我知道这就像,你甚至得到了那个交互式游乐场,你可以在其中拖放过滤器位。
什么?我知道。我告诉你,它比你想象的要多得多。是的,真正简洁地可视化正在发生的事情。是的,我不做这种事情,比如创建非常复杂的图形。它更像是格式转换、分辨率转换之类的东西,我用它来做。但是是的,如果您经常使用 FFmpeg 并使用视频,请查看一下。如果您向云提供商支付数百或数千美元来让您重新编码视频,那么您绝对需要查看一下。
哦,好的。它可能会节省很多钱。我以前使用过 AWS。他们有一些视频处理 API 之类的东西。最终,实际上是 Cecil Phillip 说服我应该只使用 FFmpeg。是的,AWS 可能只是在后台调用 FFmpeg。我相信他们会的,这太疯狂了,对吧?是的。我的意思是,如果他们这样做,速度会快一点,但是你知道吗?
我每个课程只做一次。这并不经常。好吧,我想如果您的所有课程都像 15 个小时一样。我知道为什么您必须付钱让人们这样做,但是,你知道的,无论如何。是的。酷。是的。如果您使用良好的缓存,那么生活就会容易得多。您可以重新运行它。如果您添加新视频来重新编码整个视频。我喜欢缓存。我不知道。我也一样。给你。我要谈论的是,我要谈论什么?我要谈论 PyTest。好的。
我实际上有点喜欢 PyTest。你没说。这是 Tim Kaminen 写的一篇有趣的文章。这很短,所以我几乎把它作为第二个,像一个额外的东西,但它真的很酷。所以他的文章是优化测试执行,它是在 PyTest 中最后运行 live server 测试。好的,这是关于使用 live server fixture 测试网站的。而且
而且如果您正在使用它,我们正在使用 Playwright 或 Selenium,这绝对是,这绝对适合您。但实际上,如果您有,
这个,这个,嗯,这个技术是,即使您只是有,如果您有任何其他,例如如果您有一个测试套件,它有一些缓慢的部分,并且它很慢是因为您正在使用某些 fixture,例如某些外部资源或其他任何东西,任何使用它作为稍微慢一点的测试,嗯,您可以使用相同的技术。所以我想先说明一下。嗯,
那么为什么最后运行缓慢的测试呢?他为什么想最后运行它们?好吧,为了效率,您可以更快地获得单元测试的反馈,这使您可以更快地获得快速测试的反馈。我不知道他为什么使用单元测试。它可以是任何快速测试。使您可以更容易、更快地发现和修复问题。您不必等待它们。此外,资源管理会保留缓慢测试(如数据库连接、外部服务等)消耗的资源。
不会在整个测试过程中被占用。因此,将这些资源隔离到最后完全有意义。
那么我们如何做到这一点呢?好吧,他正在谈论安装 PyTest Playwright,它也是一个很棒的插件,可以使用 PyTest 驱动 Web 测试。和 PyTest Django。因此,此应用程序正在运行 Django 应用程序。然后使用,所以他的测试正在使用 Live Server。那么他做了什么?他正在为端到端添加一个新的标记,一个 E2E 标记。但他实际上并没有手动标记任何内容。
手动地,他来使用 pytest 可爱的钩子函数之一。这个是 collect modify items。它有点古怪。所以很好。拥有这样的简单示例很好。它的作用是遍历所有测试,查找所有使用 live server fixture 的测试。然后它做几件事。他正在添加标记 e2e。因此,将 end end 标记添加到所有使用 live server 的测试中。
实际上,您可以使用 live server 标记,您可以使用任何标记名称,但我们为什么要这样做,我稍后会讲到,嗯,他正在将标记添加到较慢的测试中,然后
然后他将它们分开,先运行所有其他测试,然后运行 live server 测试。这实际上是 PyTest collect modify items 的技巧,您可以放弃某些测试,也可以重新排序它们。他正在使用重新排序。但是由于我们无论如何都必须遍历所有这些,因此他正在使用它来添加标记。然后,那么为什么要这样做呢?好吧,同样,
他有一个关于缓慢或快速的示例。但是您可以使用该标记,然后说,你知道吗,我正在调试单元测试。我不希望 live servers 和 ones 运行。所以你可以说,嘿,不要运行端到端。您可以说 pytest-m not ed,这将运行所有未使用 live server 的测试。这是一个很酷的标记用法,自动应用标记。这是一件很酷的事情。然后,例如,
例如,如果您只想运行 live server,您也可以说 E-M-E-D-E。因此,这是一个非常有趣的例子,说明如何自动将缓慢的测试推到最后,以及如何选择或不选择它们。很酷。我喜欢这个主意。我想我会采纳它。
这很好。也是对钩子函数的温和介绍,因为钩子函数在像重新排序测试这样简单的事情中可能有点吓人。它看起来并不简单,但它只有多少行代码,包括注释,一些空行。还不错。是的,这还不错。好的。是的,我肯定会看看这个,因为我有一些测试非常快,而对于我拥有的各种 Web 应用程序来说,有些测试非常慢。所以,是的,我会查看一下。我不使用 Live Server 或任何这些东西,但是,你知道的,这就像,
我想获取站点地图,然后调用其中的代表性子集,只是为了确保一切都在一起。这绝对是一个端到端测试。好吧,而且像,所以我看到很多情况,如果有人使用数据库连接,他们会有,或者,你知道的,使用,使用数据库来,呃,
即使只是一个模拟数据库或小型数据库,但它们拥有大量已填充的测试数据。也许它并不真正缓慢,但比其他东西慢。它通常通过 fixture 访问,您可以轻松选择使用该 fixture 的测试。这很酷。我提出这一点的另一个原因是……
我想确保每个人都明白,是的,我经常写关于 pytest 的文章。但我希望其他人也写关于它的文章。因此,如果您写了一份很酷的文档,很酷的一些很酷的 pytest 文档,请发送给我。
确实。看起来不错。好吧,让我们跳到一些额外内容。好吧,我们在 Talk Python Training 上开设了一门新课程,这是它的第一次公告。我甚至还没有机会发送关于这方面的电子邮件,但 Vincent Wormerdam(他以前曾在 Python Bytes 上出现过)创建了一个简短的……
Python 课程的 LLM 构建块。所以这不像提示工程或类似的东西。它就像,您可以使用哪些好的库来构建使用 LLM 执行各种任务的代码?如何获得结构化输出?例如,如何使用 Pydantic 来与 LLM 通信,使其应该以 JSON 响应而不是文本响应与您对话?所以
诸如此类的事情。是的,超级简洁。因此,请查看本课程。在 TalkPython 培训中,它只需 19 美元。只需访问课程或访问 TalkPython.fm,点击课程即可。它将直接位于顶部,就像新的课程列表一样。所以请查看一下。这非常令人兴奋。同样在 TalkPython 上,我做过这个叫做深度挖掘的东西,它会深入到某个特定剧集,你可以查看它。它会告诉你像嘉宾的背景,背景,
关于您可能想要学习以更好地理解正在发生的事情或深入了解我们讨论过的每一件事的额外细节的背景等等。所以消息是我完成了为过去 10 年的每个 TalkPython 剧集获取这些深度挖掘分析的漫长旅程。结果是 600,000 字的分析。如果您通读所有内容,则为 450 万个字符。
这是很多内容。但这使得那里的搜索更好,因为如果您搜索,现在包括,基本上搜索引擎将深度挖掘视为剧集的一部分并查找内容。
那里的内容,而不仅仅是我在节目说明中添加的内容等等。所以真的很酷。对此非常自豪。那是一项艰巨的工作,但现在已经完成了。所以我写了一篇关于这方面的小文章,我会链接到它。如果您比我刚才说的更感兴趣。不错。还记得我曾有过一次抱怨吗?我甚至将上周的剧集命名为“停止将您的点文件夹放在我的波浪号短划线或波浪号斜杠或任何地方”。
好吧,Eric Mesa 说,嘿,存储 .文件的位置由 Linux 上的 XDG 标准定义。因为请记住,就像我抱怨对我的 Mac OS 设置这样做一样。而 Windows 甚至更糟,因为 .文件和文件夹甚至没有隐藏,对吧?但是 Linux 呢?好吧,这个 XDG 标准说明了这一点。所以我甚至做了一点,整理了一个关于它的简短备忘单或其他什么。
所以把东西放在你的,你知道,配置文件放在哪里?好吧,它们位于 home/,你知道,就像 ~,你的 $home 是什么,对吧?基本上是 ~ / .config。所以可能是 .config/myapp,一些设置或配置。
有一个缓存文件夹,然后你把它放在那里的 .cache 中。你的 repo 中仍然有一些 .文件夹,但不是你碰巧运行的每个应用程序或为你运行的某些东西都有一个。所以这有点酷,人们可以查看它。我在这里整理了很多细节。甚至还有一种方法可以使用此 XTG 库,它就在这里某个地方,以及 Python,如何使用它。
所以,或者实际上只是一个你可以使用的函数,但这很酷。这很酷。你知道 XDG 代表什么吗?零。是的,我一点也不知道。好吧,没关系。我们下次再查。我确实在整理那个小备忘单时查了一下,但那是上周的事了,我忘了。是的,那就是我。好吧,那是你的额外内容吗?不,我还有一些。我会很快的。好的。
每次我认为,你知道,你是《疤面煞星》的粉丝吗?你年轻的时候看过吗?我觉得我是唯一一个看过的人。没错。
这实际上是《教父》。不过这是阿尔·帕西诺。这就是为什么我认为演员相同的原因。每次我认为我离开了,他们就把我拉了回来。对。好吧,那就是我打开 Open AI 的专业版。我以为,好吧,我只是要回到这个东西的普通用户的身份。然后不,他们发布了 O3 专业版。所以我就像,啊,我必须花荒谬的钱来再次尝试一下,因为它真的值得。虽然我会在这里为团队做一件事。我会说 O1 专业版令人难以置信。
令人难以置信。它开始被淘汰了。我不知道它还能持续多久。O3 专业版对我来说似乎并没有那么好。甚至都不接近。我不知道为什么。O3 非常好。所以也许我正在考虑再次回到普通用户。但每次我离开时,布莱恩,都会把我拉回来。
另一个,这是动态的。当我写下来的时候,它是 17。现在是 20。但 Python Bytes 是全球第 20 大最受欢迎的技术新闻播客。根据 Good Pods 的说法。好的,根据 Good Pods 的说法,这还不错。并且是第一开发者新闻节目。怎么样?具体来说是开发者,而不是也涵盖技术或 AI 或其他内容。好的。
这很酷。所以感谢 GoodPods 指出这一点。我以前使用过 Chartable,但后来 Spotify 收购了它们并关闭了它们。谢谢 Spotify。我认为是 Spotify。我很确定他们肯定被收购并关闭了。好的,我希望你们中任何一位听众,在听到这个额外内容中的第二个后续项目之前,不要对该项目采取任何行动,因为这很重要。
6 月 3 日,发布了 Python 3.13.4。嘿,对吧?这很酷。涵盖了一些必须修复的 CVE,因此我们迅速解决了诸如 tarball 安全性问题之类的问题。如果您处理来自外部输入的 tarball,这可能会非常糟糕。所以你可能会想,我想安装它。不,不,不。仅仅几天后,嘿,嘿。
3.13.5 发布了,因为我们必须快速发布它来修复 3.13.4 中存在的问题。好的,所以如果您有 3.13.3 或 4,请确保您获得 3.13.5,因为 4 实际上……我不知道实际问题是什么,但这个问题就像,哦,我的天哪,我们必须再次修复它。就是这样。那些是我的额外内容。好吧,我只有几个,但让我们跳过去。所以……
关于自由线程主题,这是由谁提到的?John Hagan 发送了这个。这是来自 python.org 讨论线程的。
有一个……有一个……呃……一个讨论线程叫做“自由线程是我们的唯一选择吗?”这是来自 Eric Snow 的,我至少想听听他的意见,所以有一个……呃……关于自由线程是否是唯一方法的有趣讨论,他确实……提到他不建议不支持自由线程,但还有其他事情需要考虑
所以我只是要放下这个链接。这是一个相当长的讨论,但它是一个有趣的阅读。是的,同样值得注意的是,Eric Snow 在子解释器方面做了大量工作。是的,这部分内容是围绕子解释器进行讨论的。这里一些有趣的讨论,例如,我认为 Antoine Pelletier 的一个想法,
Petru,Petru,他是 PyArrow 的维护者,他说,作为一个数据点,我们的库支持自由线程 Python,但我甚至没有看过子解释器。而且我有点,我知道考虑自由线程会很复杂,或者至少考虑子解释器可能会很复杂,但这让我头脑爆炸。
所以我根本没有考虑它们。如果你可以让每个线程都有它自己的子解释器怎么办?怎么样?或者多个子解释器。我不知道。或者每个子解释器都有它自己的多个线程。当然。是的,因此头脑爆炸。是的,无论如何。
另一个自由线程主题。这是来自 Hugo von Kaminad 的。GitHub Actions 中的自由线程 Python。这只是,他实际上在 3 月份发布了这个,但是这个
这实际上是如何……如何确保。所以我们现在鼓励人们确保至少使用 3.14 来测试其项目的自由线程。所以如果你有一个第三方,如果你,如果你是一个第三方维护者,基本上,如果我可以通过 pip 获取你的东西,并且,
并且它有一个我可以用于其他代码的库。请针对自由线程对其进行测试,然后告诉人们您是否支持自由线程。这个讨论是如何在 GitHub Actions 中做到这一点的。所以关于如何操作的非常好的说明,它基本上只是在……中添加一个 T……这并不坏。所以这不是很多额外的工作。
确实。不多。好吧,你准备好听笑话了吗?是的。用一个想法结束它。所以命名很难,对吧?有一个著名的笑话,它将介绍这个笑话,那就是计算机科学中有两件事很难。命名事物、缓存和验证以及差一错误,对吧?是的。所以这个来自编程幽默,它有点像一个模因。它有两件事。
两位高级开发人员就像在战斗,就像,你知道,字面上的摔跤,互相打斗。所以这是一个代码审查会议。一位高级开发人员说,变量名应该是“要更新的数字”,同时她正在打倒另一位高级开发人员。变量名应该是“更新的数字”。与此同时,初级开发人员坐在那里吃爆米花,看着它发生。同时使用像 AA1 和 XYZ 这样的变量名处理新文件。
是的。而我在这里。你们有命名吗?你们有命名辩论吗?对不起,继续。你在那里。不,我们使用 linters 为我们进行争论。但我看着这个,它是一个驼峰式命名法。它需要是一个蛇形命名法。这是什么情况?它必须像 JavaScript 或 C# 参数一样。是的。
而我是最糟糕的之一。我们必须加入或把他们都打倒。每当我看到编写风格指南时,我都是最糟糕的之一,当团队中出现新的风格指南时,我总是会畏缩。但我总是确保它符合。
它至少增加了并且不会分散对行业其余部分的实际常见做法的注意力。另一件事是对于您必须允许诸如 X、Y、Z 用于 for 循环变量以及 i、I 和 j 之类的短变量名。虽然我确实同意使用 i 和 j 都是邪恶的,因为某些字体,你实际上无法分辨出两者之间的太大区别。所以是的。
是的。是的,但就像对于 n 在 int 中。是的。这就像根植于编程之外的历史数学风格,对吧?是的。我曾有人抱怨将 i 用作循环变量。我说,这太常见了。就像对于 i 在这个中,特别是如果它不是嵌套循环。为什么不呢?是的。
好吧,你做过任何 C++ 吗?来吧。那是你做的第一件事之一。对于和 i……
是的,没错。等于零。i++。i 小于 N。你索引到数组中,因为就是这样。是的。无论如何。所以你不要邀请我参加你的代码审查会议,因为我会成为背景中的脾气暴躁的人。好吧,有时候你会。也许你应该。我知道你不喜欢他们写的东西,但他们说得对。让 i 保持原样。让它保持原样。是的。
好吧,谢谢。是的,一如既往地感谢大家。谢谢大家。再见。再见。