您好,欢迎收听 Python Bites。我们会将 Python 新闻和头条新闻直接发送到您的耳机中吗?这是第 411 集,我们今天录制了第 411 集。411 集录制于 2024 年 11 月 25 日。我是 Brian。
还有 Michael。
Kennedy,本期节目由我们赞助。嗯,链接在节目说明中,但请查看 Talk Python Training 并查看课程和 Patreon 支持者,感谢你们的支持。嗯,我们还在节目说明中提供了许多链接,用于在社交媒体上与我们联系,因为我们有……我们有 Mastodon 和 Bluesky 的链接,所有参与者都有:Brian Okken 和 Michael Kennedy,以及 Michael Kennedy 的代码,所以请查看 Bluesky,但所有链接都在节目说明中,感谢大家参加直播节目。我很高兴你们来到这里并发表评论,如果您稍后收听,我们也感谢您,但如果您想收听直播,通常是太平洋时间上午 10 点,有时是其他时间,您可以访问 pythonbytes.fm/live 来收听。最后,如果您正在收听,并且您想知道我们在节目中介绍的任何链接,您可以访问我们的页面,即 pythonbytes.fm 上的节目说明页面,您也可以点击链接加入我们的新闻通讯,我们会直接将这些链接发送到您的邮箱中。
我还有两点想法,完全正确。我们之前也讨论过这个问题。我认为新闻通讯很棒,人们似乎真的很喜欢它,并与订阅者联系。
但我甚至不确定是否应该这样做,我想鼓励大家这样做。但如果您不收听节目,您可能会错过一些东西。您仍然会在收件箱中收到这些内容,您可以快速浏览一下这两件事,这两件事是他们发现的。
第二点,所有这些内容在节目中都有非常详细的介绍。因此,人们会将我们的 RSS 提要添加到他们的常规 RSS 阅读器中。规则也类似。因此,如果您想添加 RSS 提要,您可以将其添加到您的 RSS 阅读器或任何其他阅读器中,无论您使用的是什么,或者只是收听播客。
我喜欢这种黑客式的谈话方式。
你想谈谈……
拥有……是的,你黑进了……
某些网站。我黑进了某些网站,我做得很难。Python Bites 也在计划中,要进行同样的黑客行为。
所以,自从有了 Talk Python,自从有了 Python Bites,它们一直运行在 Flask 上,这是一个很棒的框架,我非常喜欢它。但事实是,令人悲伤的事实是,它现在没有得到更新。因此,如果您想进行异步编程,您必须进行异步编程。
有时很难避免它。它不支持某些类型并执行许多操作。即使它很棒且简单,感觉有点像我们的所有代码都编写在一个不再更新的框架上,这有点像个负担。所以我首先重写了 Talk Python,Talk Python 的网站。
不是课程,而是 Talk Python 的网站,因为它中等复杂,比我们的课程网站复杂得多,但比我们的电子商务网站简单得多,只是为了看看会发生什么?这是一个好主意还是坏主意?结果证明这是一个非常棒的主意。
所以我用 Quart 重写了 Talk Python 网站,我写了一篇长篇文章来表达我对它的想法。我为什么要这么做?我考虑过很多事情,比如,你为什么考虑框架 X?你不考虑它真是疯了。
我确实考虑过,我写了下来。为什么我没有选择它?因此,如果人们正在考虑更改框架,这是一个很好的例子,可以帮助人们思考 Flask、Quart 或其他框架。现在,直到这些合并为止。
如果它们最终合并,那就太酷了。例如,我们的数据库是 Benign,它很愚蠢,还有 MongoDB,它很棒。但它只支持同步代码。
所以我必须编写一个笨拙的转换层,它将每个请求传递给异步事物,等待响应,然后将其转换回同步事物,这很奇怪,对吧?我不想这样做。所以我着手解决这个长期存在的技术债务问题。
所以,Quart。首先,我考虑了什么?我考虑了 FastAPI。
我考虑了 Litestar 作为起点?一个超级可配置的框架,如果您想要类似 FastAPI 的东西,但包含了电池,就像 Django 一样,Litestar 非常接近,基本相同,它是一个真正的竞争者。我一直都在考虑 Django,但我决定不使用它。我还考虑过 Hugo,比如,你认为我们网站的多少部分可以用静态……
站点生成器(比如 Go)来重写?是的。我当时确实在考虑用 Go 来做。
顺便说一下,我们在这里看到的网站,带有这些块,是 Talk Python 中 Quart 站点的一个子站点。我认为它非常好,但有些事情,例如在 Talk Python 上,有猜测,有所有剧集,以及谁下载了哪些剧集的分析数据,以及谁赞助了这些不同的剧集。还有一个管理面板。
有很多东西,当你从外部查看时并不明显,实际上它比人们看到的要复杂得多。我决定不这样做。当然还有黑色主题,这是一个问题。
总之,我认为 FastAPI 非常棒,但它主要关注的是 API,尽管您可以让它适用于网站。我认为它并不是主要用于网站的东西,对吧?
顺便说一下,我的目标是:我想要一个非常流行的框架。我希望如果我说,“嘿,我用这个框架编写了我的网站”,你问,“你选择了哪个框架?”,那么很有可能有人也使用过它。虽然我非常喜欢 Flask,但它现在不符合这个要求。所以 Quart……
属于这一类,除了它是由很棒的人维护的事实。
是的,完全正确。我几乎没有考虑过 Quart,但我最终选择了它。这是因为我和 David Lord 谈过,关于它如何与 FastAPI 一样好,他们都在为两者做贡献。
有人试图将 Quart 正确地集成到 Flask 中。所以也许有一天它们会合并。如果我改变主意,我只需要将小写 quart 替换为小写 flask,大写 Quart 替换为大写 Flask,它就又变成了 Flask,这是一个非常小的变化。
我的意思是,出于这个原因,我觉得值得考虑。好的,所以 FastAPI 非常棒,显然,但 FastAPI 主要关注的是 API。Litestar 也不是很流行?它比 Hugo 更流行。
但它并不……它并不在……当然,Django 非常棒。我的意思是,通过进行这项研究,我发现了一个有趣的现象。查看 PSF(Python 软件基金会)的 Python 开发者调查,如果您查看最流行的框架,Flask 比 Django 更受欢迎。
但如果您查看使用 Web 框架的 Web 开发人员,Django 比 Flask 流行两倍多。这很有趣,对吧?是的,所以有很多机器学习模型。无论如何,我解释了为什么我不太喜欢 Django,并且不想采用它。
您可以阅读这篇文章,如果您感兴趣的话。我认为 Go 非常棒,因为它们在技术上可能会崩溃,数据中心可能会崩溃,但静态站点崩溃的运行时原因并不多。这太棒了。
所以我分两个步骤进行了升级。我首先说,让我们用 Quart 重写所有内容,但保留同步代码。因为最大的挑战之一是将整个堆栈重写为异步的,对吧?所以让我们先让它以这种方式运行。
但在 Quart 框架上,它不像 Flask 那样。所以这花了一点时间。也许我花了一整天,10 个小时左右。
你把这个坏家伙干掉了。然后是 2280 行代码更改,3000 行……
代码被删除了。这是一个很大的块。然后我将其转换为异步,在我测试并立即部署它之后。这是另外 1600 行代码,700……
行代码更改。但是,是的,性能很棒。所以关于转换为 Quart,然后你做了异步转换,花了多长时间?是的。
我说也许 8 个小时,或者 6 个小时,8 个小时,让我们说 6 个小时,不到一天的工作时间。不是那种“我今天的工作结束了”的那种。但是,是的,我们谈论的是性能提高了 5 倍。
这相当不错。是的,它真的……
非常好。而且我能够摆脱……很多速度提升来自……好的。你收到一个请求,将其发送到某个异步后台线程,它可以单独运行它,等待响应。
好的,我得到了响应,我获取响应,然后将其发送回同步版本以返回。所有这些协调工作增加了许多内容。它并没有增加很多 CPU 负载,但只是这里和那里的延迟。
你知道,对我来说就是这样。最后,如果您有很多页面,并且您想确保它们没有损坏,我测试它们的方式是,我只是访问站点地图,其中包含 1000 个页面。我编写了一个 Python 程序来请求站点地图中的每个 URL,并确保它们返回 200 或 404 或类似的东西,这样我就可以将它推送到生产环境中了。
生产环境中的站点地图……
链接列表……你这样做了吗?是的,因为你通常需要一个站点地图用于 SEO 和 Google 等,因为它们用来发现……我们的网站有多少内容可以被索引,以及如果我们没有链接到它,但我们想让它为人所知,我们可能会错过什么,基本上就是这样,对吧?所以在这里……
在站点地图上。
我们有……你知道……检查。所以……所以这里有一个问题。一个人遇到一个问题,我错过了。
当您提交表单时,处理提交内容后显示的页面。我在那里有 1 或 2 个区域,一个很小的管理问题只影响了我,但有人……注册了数百万个邮件列表。
邮件列表有一个特殊的页面,如果您成功注册。所以谢谢。这里还有一些其他事情。不知何故,我忘记检查结果。那里有一些错误,很容易修复。
但很难发现链接,不在……是的,是的。
它们甚至可能在那里。但你必须使用 HTTP POST 方法和数据来发现它们。因为……要显示表单。但我想要处理表单,这就是我……我忘记在结果 POST 处理程序中等待某些东西。
这就是我……一个交互式用户群,他们可以准确地告诉你……
世纪向我发送了很多消息,说,“你知道为什么崩溃了吗?”是的。不。好的,是的,无论如何,对吧。
所以希望……因为它……我认为它很有趣,但我认为更重要的是,我想要你介绍这个的原因是,我认为这对其他人来说也很重要,他们想,“嘿,我们使用的是 Flask,也许我们不应该再使用了。也许我们应该从这三个中选择另一个,就像 Michael 做的那样。我相信这会帮助一些人完成这个过程。
是的,好的。好的,我想谈谈 PyPI。嗯,PyPI……
一个关于它的测试站。
我甚至不知道那是否对我有用,嗯,但是 PyPI 现在支持数字证明。是的,好的,这是什么意思?好吧,我不确定这到底是什么意思,但这是一个供应链问题。
所以 PyPI 包维护者现在可以在发布时发布签名数字证明,以进一步提高对项目供应链安全的信任。听起来很酷。嗯,实际上有一个新的 API……一个新的 API 可供使用者和安装者验证已发布的公共证明。哦,我的天哪,这听起来像是很多工作。幸运的是,事实并非如此。
嗯,所以……如果您是一个包……我们将链接到 Python 包索引博客,这是由 Dustin Ingram 撰写的……嗯……讨论了为什么他们没有……嗯……使用签名身份密钥对……嗯……但要点是,如果您……如果您已经在使用 GitHub Actions 和受信任的发布,并且您正在使用 GitHub Actions PyPI 发布……GitHub Actions 的挂钩……它会为您工作。您只需要确保版本是……我认为是……好吧,我查看了另一篇文章。我认为是 1.11……让我们查看一下……所以这篇文章……是另一篇文章。
PyPI 引入了数字认证来加强 PyPI 包的安全性。嗯,这是 Sarah Gooding 写的,正义 IT 在这里,是的,1.11.0 版本是您现在需要使用的版本。如果您想使用其他东西,如果您不想使用 GitHub Actions,或者使用其他东西,那么是否有计划为其他受信任的发布者环境提供支持,然后如果您甚至不想这样做,如果您想手动执行此操作,则不推荐这样做。但是您可以手动执行此操作,因此您不会被锁定到 GitHub Actions,我认为这对他们来说是一个合理的首选实现方式。
嗯,您必须处理一堆混乱。我们首先展示了他们所做的工作,他们说还有一篇文章,嗯,由 Sarah Gooding 撰写,一篇非常好的文章,它也介绍了新的 API 的 UI,以及文件的外观。关于这一点很酷的是,好吧,这看起来有点技术性,好吧,就像您知道的,供应链安全等等,是的,啊,是的,但实际上我们都在乎什么,我们真的在乎,但我也意识到,嗯,PyPI 上有链接指向项目,说明源代码在哪里,但是您只是将其放在那里,并没有保证链接。现在,这就是认证发挥作用的地方,这样我就可以验证该对象确实来自源代码,因此您没有撒谎。
没有人从中撒谎。并且发布的包确实来自该源代码,而不是其他东西。这就是我们想要的。我们希望我们的开源项目易于使用,易于安装,而且我们还可以轻松找到源代码。这就是这一切的意义所在。还有一个很酷的,我们是否已经达到 PEP 740 了,嗯,这只是向您展示了一些顶级包,查看 360 个下载次数最多的包,以及它们是否已获得支持,这很新奇,因为目前支持的包并不多,但是我们正在努力支持,例如,干得好。
节目干得好。我看到了我的依赖项。
我不知道那是什么,它随之而来。
是的,某个库,Markdown 库。我不确定我是否编造了 360 这个数字,因为它是一个轮子。有一个可视化效果,它是一个轮子,每一小块都显示哪些包在那里。
但是是的,关于 Glad 的一些评论。
cripp 图表 pto 的 phy 包。是否对测试进行了测试?当然。
Christian 说受信任的发布非常棒。在 PyPI 上发布从未如此简单。如果您使用 GitHub Actions,确实如此。Brian,当我说到上一次发布的 uvbuild 时,你说你甚至没有这样做。你应该这样做。
使用 GitHub Actions,是的,是的。我怎么会发生这种情况呢?好吧,我们来看看。
这个包信任。
发布,有一个,嗯,有一个关于如何执行此操作的文档。受信任的发布者。您必须拥有 API 令牌,您需要在 GitHub、您的 GitHub 项目和 PyPI 之间链接令牌。因此他们彼此了解。然后,我只需要一个 GitHub Actions。
PyPI 发布步骤?
所以有很多方法可以做到这一点,因为我个人发现我,嗯,我最喜欢的方法是在标记的一部分进行发布。所以,嗯,我这样做是为了另一个版本,就像我发布到,我不发布我推送到 GitHub 的所有内容,但是,嗯,当我推送标签时,就会进行构建并发布,所以它。
推送标签,是的,是的,那很好。
问题。我认为我们可能需要重新审视并记录整个过程,因为是的。
我正在寻找一个 Velox 的主题。感觉有点生疏。我的意思是,你们感觉你们的博客有点生疏。
我感觉生疏。感觉超级生疏。我的意思是,很多生疏。但是,我想重点介绍一个项目,它还处于早期阶段,但我认为无论如何它都值得关注,来自 Lily Foote 的 Django Rusty Templates。
所以所有这些框架都有一些模板引擎的变体。所以您有您的 HTML。然后您将拥有某种表达式,例如循环遍历我的所有博客文章,例如输出标题和内容,或者其他什么,对吧?他们会有这些。
它们有不同的变体。它们并不像您想象的那么一致。实际上,我将在节目的最后回到这个完整的主题。但是,这个项目重新实现了 Django 模板引擎,Django、Jinja、Mako、Quill 等。还有整个 PEP 750,也许它会将模板引擎引入语言本身,所有这些东西,对吧。
所以这个项目重新实现了 Django 模板引擎,目标是:1. 输出兼容性,当然不是输入或编程方式,而是至少输出兼容性;2. 错误报告至少与 Django 一样好;3. 显然,如果您不希望提高 Python 实现的性能,您为什么要这样做?这些东西可能会很慢。
它们确实如此,例如,可能导致您的网站启动速度非常慢的一件事(如果它承受着巨大的访问量)就是重新启动它。它必须重新渲染所有模板。我甚至制作了一个应用程序,我们稍后会看到,它可以针对网站运行,它将请求所有 URL 的一个代表性子集,以确保模板已加载和解析,因为这是几百万秒与几十毫秒的区别,对吧?
第一次加载页面可能需要长达一秒钟,对于这些复杂的事情来说,这很长。您希望您的页面加载速度很快。因此,当 Google 等搜索引擎看到“哦,这个页面加载速度很快”时,它会在搜索结果中排名更高。
无论如何,这可能是为世界做出的贡献。它还没有准备好全面发布,因此尚未在 PyPI 上。如果您想冒险或贡献,可以查看它。
让你推送它。那是服务器。
完全正确。我正在休假,分数是 0.2。拜托。
拜托。现在一切都很好。人们可以做他们想做的事情。
但是当然,我想这取决于情况。您是否觉得它甚至接近可用?或者您仍在开发它,或者它甚至?是的。
你不想有一堆。
错误说这不起作用。我知道,我说不要使用它。
是的,但也有一些人认为这是一个好主意,如果您想帮忙,那就帮忙吧。
绝对的,嗯,我们是否?我不。
想说得太干,但我想谈谈另一个 PEP,所以 PEP 谈话,嗯,所以 Brett Cannon,现在,所以这是我第一次听说这个,嗯,这个帖子评论是在 11 月 13 日,嗯,PEP 639 现在受 PyPI 支持,嗯,这是一个 PEP,它允许您使用 SPDX 表达式指定许可证,谁会对 SPDX 表达式感到兴奋,并且它很容易包含所有许可证以及您的代码,嗯,我不知道 SPDX 是什么。
但让我们深入了解一下。我为什么对此感到兴奋?因为以前指定许可证的方式是您使用一个小的许可证字符串来表示 MIT 或其他什么,但随后您可能有一个指向许可证文本文件的链接。但这并不清楚您应该做什么,但为了让许可证显示在 PyPI 上,您必须有一个 Trove 分类器,而我并不真正喜欢查找 Trove 分类器,我认为我们不再需要使用 Trove 分类器了,所以,嗯,糟糕的链接到,嗯,嗯,嗯,PEP 639 现在上线了,所以这只是同样的事情,但只是以某种方式,嗯,所以让我们看看这个,嗯,我认为关于这一点很酷的是,就像我说的,您不再需要使用 Trove 分类器了,嗯,我不打算深入了解它到底是什么样的?
所以我们有原因等等,但以前真的很混乱,现在已经解决了,所以您只需执行以下操作:您有一个 license 字段,您在其中放入 MIT,所以这很简单,嗯,但是有,所以如果您有,您可以在这里使用逻辑。如果您有多个许可证,并且项目非常大,则可能有多个许可证,因为您可能在系统的一部分中使用了另一个库,该库使用不同的许可证。您在那里做什么?好吧,这正是其中一个很棒的地方,因为这里有逻辑。
但您也可以使用 license-files 键。license-files 键很棒,因为您可以,有多个,您可以有多个,并且您可以指定它们的位置。它只是一个字符串列表,其中包含通配符等,以便您可以使用正则表达式来查找不同的文件,您甚至可以像这样:我喜欢这个版本。它有一个主要的许可证在顶部,然后是 licenses 目录,因此您可以为每个库拥有一个许可证。
哇,这就像从列表中创建一个参数集,比如星号,然后它会展开成位置参数。这就像墓碑。
我知道我知道。好吧,它是 SPDX。所以,嗯,嗯,这对我来说非常令人兴奋。我有一个问题。就像,好吧,这还不是最终版本。我想它是 PyPI 的临时支持,但他们说它将是,他们需要,这是一个 PEP 的实现,在两个构建系统中向后兼容。你知道的,两个构建系统。
向后兼容的构建系统,例如 hatch 或 poetry 或类似的东西,它们肯定会有设置工具或类似的东西。
像那样,以及在 PyPI 中实现 PEP,这已经完成了。所以我非常确定。是的。
您点击的第一个链接讨论了无论如何,是的,是的。看到了。第二件事,Carey Sumrall 从这个版本开始就编写了 PDM 并支持它,并且 hatch 也是另一个版本,我相信条件已经满足。
好的,我认为这将从临时更改为。
其他东西。所以。
无论什么。
接下来是什么,我只想对 Philip 和 Caroline 的团队说几句话,您创建的文件,这是根据下划线文件许可的,没有扩展名。请考虑一个扩展名,以便我们可以有一个默认值,这样您就可以双击并打开它,而不是必须找到一个编辑器,进入一个龙卷风,进入一个,没有扩展名,您可以设置一个默认编辑器来在 Mac 或 Windows 上编辑许可证文件,我喜欢。
说,许可证到文本或。
某些东西,是的,MD 或 YAML 或 TOML,我会说 YAML 或 TOML 更合理。如果它具有这种结构,那么您拥有的编辑器,您打开的 PyCharm 可以根据格式应用于它。现在是什么情况?就像,好吧,随便什么,只是文本。好吧。
所以这些更改,我正在展示的这些更改,它们是 YAML 或 TOML 之类的,因为它们是项目的一部分。
哦,它们是,好吧,有人谈到了 license-key 文件或是的,是的,并且有一个 license-understand,license-files。哦,它只是键,那实际上不是一个文件,好的,那是键。我认为。
那里有一个,可以被是的。
嗯,但我通常,我通常只是没有。
错,但我喜欢创建一个文本文件的想法,是的,以及应用于它的东西。
使工具应用于它,如果合理的话,否则不会这样做。
像 Word 文档一样。
来吧,卖掉它,而不是。
像黑暗的 exe 一样,你知道,从 1995 年开始。
3 个 exe。
让我们继续吧。嗯,我认为这些项目。
好的。
好吧,嗯,您有一个 x。
这里还有几个快速更新,通过森林快速浏览。Python 3.14.0a2 上周发布,就在我们上周节目之后。所以,在我们能谈论的最新版本中,我相信无论如何,它继续进行其对 Python 的 649 第三方注释的升级。
配置 C API,不再有 PGP 签名,以及改进的错误消息等等。所以,如果您想针对它进行测试,请查看它。记住,会有 7 个。
所以这还处于早期阶段,但如果您愿意,您将能够影响选举。蓝天,对吧?我们有个人资料。Python 个人资料正在入侵蓝天。
我想说我对参与度以及人们对它的期待程度感到非常高兴,所有这些事情看起来都非常棒,对吧?不,是的。
所以我们在蓝天上所有帐户的链接都在那里。但重点是我创建了一个入门包。我认为这些入门包实际上是蓝天中的一种神奇的增长工具,也是人们的好方法。
所以,常见的社交问题,社交网络问题是,您加入后一片寂静,然后您关注您不关心的东西,因为每个人都知道关注者。所以这里有一堆糟糕的东西。他们想看看那些很棒的人在谈论这个或那个。
我一点也不关心这些,我只想回到我关心的社区。因此,对于每个社区,你可以创建,人们可以创建,称为“包”,最多可容纳 250 人。你只需点击一个按钮,说,我们想快速开始关注这些人。
所以我创建了一个 Python 人员包,我认为可能有 60 多人,稍后我会展示。但它现在已经创建好了。然后它会显示你添加的人,比如 Becky、Chris、Hilla、Savana、Simon Willison、Peter Wang 等等。
所以在这里,Brian、Brett Cannon,他们在文章、PEP 等等中被发现,都在这里。所以我只想鼓励人们去寻找这些包,考虑我的,点击一下等等。你如何做到这一点?嗯,很好。
我指出,有一个 blueskydirectory.com 网站,上面列出了所有入门包。你可以搜索,比如“Python 入门包”或你看到的任何东西。比如,这里有一个。我创建了不同的包,Python 核心团队等等,我相信是这样,对吧?所以实际上有 572 个入门包,但我怀疑有很多重叠和交叉。
是的,我检查过这个,能够做到这一点很棒。有些人一直在关注我,我对此表示感谢,因为我不是一个经常关注别人的用户。所以,我喜欢在早期寻找 Python 人员,并且有很多 Python 人员加入。
在绷带方面,就在昨天。
是的,所以,我浏览你的列表时,发现有十几个我还没有关注,但我想关注的人。
是的,我在两小时前才向其中添加了一个人。所以一直维护到上限,直到它达到上限。我不太想做出艰难的决定,比如拒绝其他人。
但现在,我有另外 600 人在考虑,这个目录显示了列表有多大。你关心这个吗?好的,还有一件非常快的事情。我必须把这个留到下次。看,下次我们会介绍这个。
下周。好的。我有一些额外的内容。我没有介绍这个,因为我真的,我不知道我是否足够聪明来介绍这个,但我还是链接了它。有一篇 Armin Ronacher 的文章,标题是“Playground Wisdom: Threads Beat Async/Await”,他并不是真的在谈论 Python 线程,他是在谈论 Python 异步,我认为是这样,但也只是在谈论一般的编程语言,关于并发思考方式。这是一篇有趣的文章,讨论了如何使并发变得非常容易,以至于我们实际上并不谈论并发,它只是起作用了。这在某些方面看起来很诱人,如果你习惯于其他语言,但它以一种非常简单的方式展示了异步的思考过程,例如,他举了一个关于为孩子们设计的 Scratch 编程语言的例子。如果你有,比如,他举了一个例子,一只猫和一只老鼠的代码,只是,你知道,移动几次,或者像 while 循环。
当鼠标 x 小于 200 时,将 x 位置更新 5,然后休眠 10 秒,然后对猫也这样做。你有一只猫和一只老鼠互相追逐,问题是这些是同时运行还是一个接一个地运行?在 Scratch 中,这些都是它们自己的线程,它们自己的东西正在运行,没有单一线程,就是这样。我并不是说我们都应该现在就去编写我们的 Scratch 框架。我的意思是,这是一个有趣的观点,意识到……
这可以很容易地实现。我在这里既同意也不同意。我真的很喜欢 Armin 最近在他的博客上所做的事情。他写了一些非常有见地的文章,让我频频点头表示赞同。然而,我认为一些反对意见,我没有读过这篇文章,所以这对我来说很容易,但我希望在我的阅读清单中阅读它。
但我认为部分反对意见是他认为有些事情并不容易,我认为有一些异步的基础还没有建立,应该建立。例如,在这个例子中,创建一个名为 move_mouse 的函数,创建一个名为 move_cat 的函数。如果这是异步的,这是 C#,你调用你编写的代码,在 C# 中,这个词我认为应用于函数,基本上它会像这样运行,好像没有什么可做的,异步就是这样处理的。但是 Python 没有运行所有异步内容并保持运行的后台管理概念。
你必须进入循环并说,“嘿,循环,这里还有另一件事要运行。请启动这个”,而在许多其他语言中,调用异步函数的行为会在幕后协调,你必须考虑这一点。启动运行,你得到一个正在运行的任务的 AAAA 对象,它已经在某些你配置的东西中被处理了。
在 Python 中,你认为你有一个,因为它提示你,看起来像一个函数,但现在你必须找到一个实际运行的地方,而很多时候,找到这个地方总是很麻烦。就像,“哦,我想我得到了一个事件循环异常,没有事件循环,或者在其他时间创建一个”。
创建事件循环异常。已经有一个事件循环了,就像,这里发生了什么?我总是与这个作斗争,或者有一个循环,但我需要从另一个线程访问它,它是线程局部的。我如何通过变量连接这两件事,以及如何全局化,就像所有这些东西让它变得棘手,如果可以在幕后有一些基础设施,我只是,我不知道,这可能为时已晚,这将是非常不幸的。
我认为这可以建立在现有基础之上。
也许,也许我认为问题的一部分是挑战,就像,这是你的工作,连接这些部分比它应该的要多。
这就是我认为的。我也使用过它们。所以我使用过 Trio,但它是一个并发框架,默认情况下很容易使用,比如通用线程池,很容易使用,很容易添加内容。它只是发生了,然后,如果你想要一个单独的线程池,它只是单独管理的。太棒了。
并将其放在连接的地方。我认为这很棒,对吧?而不是你总是必须以艰难的方式去做。
是的,是的,我们需要至少,对于类似的情况,无论如何都存在一种简单的方法。但是,是的,我也戴着我的帽子说话,因为我还没有阅读很多关于 asyncio 的 Python 内容。是的。
我将非常快速地总结一下。在 Quart 中,有一个由 Web 框架管理的单一事件循环,或者它甚至是由启动框架的应用程序服务器管理的。但我认为有一个专门的事件循环来处理它,它直到所有启动代码完成后才存在。
因此,如果你有任何异步代码要在实际启动之前调用,你就像,一切设置好了,所有东西都填充好了,运行一个锐利的请求处理过程。你基本上几乎无法做到这一点,例如。所以对于数据库,你必须说初始化数据库并获取所有连接等等。所以如果你编写代码来执行此操作,然后尝试在 Web 视图中使用它,在一个请求中,它会崩溃,说错误的事件循环。
它在这个事件循环中初始化,但在核心事件循环中运行,你就像,但我如何启动它?如何在 Web 请求启动之前向数据库提出问题?你知道,也许如果数据库已初始化或未初始化,我想做一些不同的事情,对吧?我不知道。就像所有这些挣扎,有一些机制可以这么说,好的,你可以有一些在不同时间运行的启动代码,但这只是很难。是的,无论如何,我希望我对此更加努力。我希望有人会说,“好的,在 Quart 开发者峰会上,我们能否简化一下?”好的。
然后,我还有几件快速的事情。Python 测试社区现在在 Discord 上,启动发生在几天前,上周。进展顺利。到目前为止,我们已经有 89 人。如果你想成为其中一员,而你又不是,如果你已经是社区的一员,你已经收到了电子邮件,如果你想成为社区的一员,而你没有收到电子邮件,或者你以前没有参加过我的任何活动,你可以访问 courses.pythontest.com。
你甚至不需要参加课程。你可以直接获取 Discord 社区链接,它正在打折,网站上的所有其他内容都在黑色星期五促销,使用代码 turkeysale2024 打八折。这只是在网站上发布的,不是秘密。然而,关于这本书有一个秘密。所以 Python 测试,pytest 书籍现在有四折优惠。
你只需要使用黑色星期五代码,它也是一样的。turkeysale2024。我只是想让人们更容易记住。所以很容易通过销售进行测试。
是的,享受火鸡。
是的,我玩得很开心。我不得不接受跳舞的标志等等。我知道你可以关闭它们,但我实际上意识到我有点喜欢它们。
现在有小 Vicky。是的,黑色星期五促销。我还没有启动它,是的,但这是我今天的目标。所以我会把它放在节目说明中,人们可以查看它,但它不是 100%……
最终细节。
但我认为这是我的问题。嗨,我不接受 11 月快结束了,但是,离雨季结束还差一个月。我们离阳光更近了。
让我们开始吧。是的,你准备好听笑话了吗?是的。所以这个笑话,我想每个人都还没有见过或听过这个笑话。
还记得我们有 AI,悲伤的女孩,AI 演唱歌曲,演唱 MIT 许可条款吗?是的,这就像这样,但这是一个重金属摇滚乐队演唱的 curl 命令的冗长输出,curl -v -v -v google.com。
有很多旧的东西,有很多技术的东西。所以我们将有一个重金属 jam session。我想指出你的音量很大。
把它调低一点。如果你真的讨厌重金属、硬摇滚,那就停在这里。我们不会介绍其他任何内容。我不希望你,如果你真的喜欢一些激烈的摇滚,但这也很有趣。
我还想补充一点,在 YouTube 视频中,我链接到的视频中,有一条评论说,“嗨,我是 curl 的创建者,我衷心认可这件杰作”,如果你不喜欢硬摇滚,你不会喜欢它。所以,直接跳过吧,大家。我们开始吧。
最后一点,3.0 版已经很清晰了,就像 1.3、1.3.3 一样。3 在……
3 出 3。
好了,这就是这篇文章。真正的歌曲在 3 分半钟左右。我做不到,我无法为你播放所有内容。所以这是一个预告。
观看完整节目。
我已 DOS。一个插孔。
你好。
大家好。
Brian,再见。