gpt4 book ai didi

Python:使用协程进行异步 HTTP 请求-响应?

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:13 26 4
gpt4 key购买 nike

在 Python 中是否有可能 - 使用纯 a = yield 协程语法,而不是像 asyncio 这样的库 - 在收到响应之前发出 HTTP 请求并同时做其他事情?像这样的东西:

>>>requests.get('http://www.json-generator.com')
# do something else here while the above request is being made

就像使用 AJAX 一样,可以发出请求而不必等待响应?或者我可能误解了协程背后的想法?

最佳答案

您确实误解了协程的工作原理。

首先,以AJAX为例,它可以工作是因为javascript引擎。浏览器中的 nodejs 和 javascript 都是事件驱动的(或者说回调驱动)。这意味着整个程序实际上是一个无限循环。您编写的代码是将事件添加到此事件循环,而循环的详细信息已为您隐藏。它还为您隐藏了许多其他细节。比如response handler是如何插入到事件循环中的。

第二,yield并不是真正的协程语法。它是一种生成器语法。但由于generator表面结构与coroutine类似,没有内置语法支持,所以可以作为coroutine语法来使用。而在Python3.5之后,我们现在使用特定的关键字asyncawait协程支持。

第三,asyncio就像 javascript 中的引擎一样工作。它为您提供了一个事件循环,以便您可以制作一个事件驱动的程序。还有许多其他库,例如 eventlet , geventtrio .基本上它们都做同样的事情:提供事件循环实现。

最后,您可以制作自己的协程实现,这样您就不需要依赖任何库。但这真的毫无意义。

顺便说一句,requests本身暂时不支持异步操作(requests<3.0)。

关于Python:使用协程进行异步 HTTP 请求-响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54066105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com