gpt4 book ai didi

python - 将阻塞请求的库重写为异步请求

转载 作者:行者123 更新时间:2023-12-01 08:12:54 26 4
gpt4 key购买 nike

有一个库在其核心中使用阻塞请求,我想将其重写为异步版本,所以您能否建议最好/最简单的策略是什么?

整个库在几个嵌套函数之后调用一个函数:

def _send_http_request(self, url, payload, method='post', **kwargs):
# type: (Text, Optional[Text], Text, dict) -> Response

response = request(method=method, url=url, data=payload, **kwargs)

return response

仅仅将 async 放在它前面是行不通的,因为它深深地嵌套在阻塞函数中。而且重写所有内容会很麻烦。我查看了 aiohttptrioasks,但有点迷失了,哪个更好。我了解 celery 或 dask,但我需要异步。

最佳答案

您有多种选择:

  1. _send_http_request 重写为异步(例如,使用 aiohttp ),并进一步重写所有使用 _send_http_request 为异步的函数。是的,这需要做很多工作,但这就是 asyncio 的根本设计方式。

  2. 仅包装需要使用 run_in_executor 异步运行的顶级阻塞函数(具有 I/O 的函数)如上所述 here 。如果您不打算发出数百万个请求,那么您不会看到上述选项有太大的性能差异,因为主要瓶颈仍然是 I/O。否则,与纯 asyncio 解决方案相比,线程开销将会非常明显。

  3. 尝试其他解决方案而不是asyncio。例如,gevent及其 monkey-patching 。这种方法有其优点和缺点。

关于python - 将阻塞请求的库重写为异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55129875/

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