网站开发使用的开发工具90设计网站怎么绑定手机号
2026/4/15 9:14:15 网站建设 项目流程
网站开发使用的开发工具,90设计网站怎么绑定手机号,关于网站排名优化需要怎么做,写作网站招聘现代版本的 Python 有一种非常直观的方式来定义异步代码。这使它看起来就像正常的顺序代码#xff0c;并在适当的时候等待。 当有一个操作需要等待才能给出结果#xff0c;且支持这个新的 Python 特性时#xff0c;你可以编写如下代码#xff1a;…现代版本的 Python 有一种非常直观的方式来定义异步代码。这使它看起来就像正常的顺序代码并在适当的时候等待。当有一个操作需要等待才能给出结果且支持这个新的 Python 特性时你可以编写如下代码burgers await get_burgers(2)这里的关键是await。它告诉 Python 它必须等待get_burgers(2)完成它的工作 然后将结果存储在burgers中。这样Python 就会知道此时它可以去做其他事情 比如接收另一个请求。要使await工作它必须位于支持这种异步机制的函数内。因此只需使用async def声明它async def get_burgers(number: int): # Do some asynchronous stuff to create the burgers return burgers...而不是def:# This is not asynchronous def get_sequential_burgers(number: int): # Do some sequential stuff to create the burgers return burgers使用async defPython 就知道在该函数中它将遇上await并且它可以暂停 执行该函数直至执行其他操作 后回来。当你想调用一个async def函数时你必须等待它。因此这不会起作用# This wont work, because get_burgers was defined with: async def burgers get_burgers(2)因此如果你使用的库告诉你可以使用await调用它则需要使用async def创建路径操作函数 如app.get(/burgers) async def read_burgers(): burgers await get_burgers(2) return burgers更多技术细节你可能已经注意到await只能在async def定义的函数内部使用。但与此同时必须等待通过async def定义的函数。因此带async def的函数也只能在async def定义的函数内部调用。那么这关于先有鸡还是先有蛋的问题如何调用第一个async函数如果你使用FastAPI你不必担心这一点因为第一个函数将是你的路径操作函数FastAPI 将知道如何做正确的事情。但如果你想在没有 FastAPI 的情况下使用async/await则可以这样做。编写自己的异步代码Starlette 和FastAPI 是基于 AnyIO 实现的这使得它们可以兼容 Python 的标准库 asyncio 和 Trio。特别是你可以直接使用 AnyIO 来处理高级的并发用例这些用例需要在自己的代码中使用更高级的模式。即使你没有使用FastAPI你也可以使用 AnyIO 编写自己的异步程序使其拥有较高的兼容性并获得一些好处例如 结构化并发。我指原作者 —— 译者注基于 AnyIO 新建了一个库作为一个轻量级的封装层用来优化类型注解同时提供了更好的自动补全、内联错误提示等功能。这个库还附带了一个友好的入门指南和教程能帮助你理解并编写自己的异步代码Asyncer。如果你有结合使用异步代码和常规阻塞/同步代码的需求这个库会特别有用。其他形式的异步代码这种使用async和await的风格在语言中相对较新。但它使处理异步代码变得容易很多。这种相同的语法或几乎相同最近也包含在现代版本的 JavaScript 中在浏览器和 NodeJS 中。但在此之前处理异步代码非常复杂和困难。在以前版本的 Python你可以使用多线程或者 Gevent。但代码的理解、调试和思考都要复杂许多。在以前版本的 NodeJS / 浏览器 JavaScript 中你会使用回调因此也可能导致“回调地狱”。协程协程只是async def函数返回的一个非常奇特的东西的称呼。Python 知道它有点像一个函数它可以启动也会在某个时刻结束而且它可能会在内部暂停 ⏸ 只要内部有一个await。通过使用async和await的异步代码的所有功能大多数被概括为协程。它可以与 Go 的主要关键特性 Goroutines 相媲美。结论让我们再来回顾下上文所说的Python 的现代版本可以通过使用async和await语法创建协程并用于支持异步代码。现在应该能明白其含义了。所有这些使得 FastAPI通过 Starlette如此强大也是它拥有如此令人印象深刻的性能的原因。路径操作函数当你使用def而不是async def来声明一个路径操作函数时它运行在外部的线程池中并等待其结果而不是直接调用因为它会阻塞服务器。如果你使用过另一个不以上述方式工作的异步框架并且你习惯于用普通的def定义普通的仅计算路径操作函数以获得微小的性能增益大约100纳秒请注意在 FastAPI 中效果将完全相反。在这些情况下最好使用async def除非路径操作函数内使用执行阻塞 I/O 的代码。在这两种情况下与你之前的框架相比FastAPI可能仍然很快。依赖这同样适用于依赖。如果一个依赖是标准的def函数而不是async def它将被运行在外部线程池中。子依赖你可以拥有多个相互依赖的依赖以及子依赖 作为函数的参数它们中的一些可能是通过async def声明也可能是通过def声明。它们仍然可以正常工作这些通过def声明的函数将会在外部线程中调用来自线程池而不是被等待。其他函数你可直接调用通过def或async def创建的任何其他函数FastAPI 不会影响你调用它们的方式。这与 FastAPI 为你调用路径操作函数和依赖项的逻辑相反。如果你的函数是通过def声明的它将被直接调用在代码中编写的地方而不会在线程池中如果这个函数通过async def声明当在代码中调用时你就应该使用await等待函数的结果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询