gpt4 book ai didi

python 3.7 对cosmos db的异步http请求

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

我是 Python 新手,我想使用 Python 向 cosmos DB 发送异步 HTTP 请求来执行批量插入操作。我尝试将多线程与 asyncio 一起使用来完成此任务。它已经给我带来了很好的性能,但我相信它肯定可以进一步改进,这是代码:

        try:
loop = asyncio.new_event_loop()
return loop.run_until_complete(save(request.json))
except ValidationException as e:
return send_error(e)
    async def save(self, users):
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
loop = asyncio.get_event_loop()
futures = [
loop.run_in_executor(
executor,
self.__save_to_cosmos,
user
)
for user in users
]
result = await asyncio.gather(*futures)
return result

请注意,“__save_to_cosmos”方法正在使用 python SDK 及其同步代码向 Cosmos DB 发送 HTTP 请求,因为据我所知,Cosmos DB SDK 不支持异步操作。

谁能建议是否有更好的方法来完成这项任务?

最佳答案

Can anyone suggest if there is a better way to achieve this task?

嗯,很难完美地回答这个问题。我尝试根据我的知识与您分享一些想法。根据 bulk executor document ,Cosmos db 仅支持 .netjava 库。所以,你需要自己封装Python的bulk方法。

目前,您使用 asyncio 包,该包使用事件循环来处理将要处理的内容。一切都运行在单进程和单线程上。在此基础上,我认为你可以使用 multiprocessing 包来进一步提高效率。请引用 multiprocessingdocument :

multiprocessing is a package that supports spawning processes using an API similar to the threading module. The multiprocessing package offers both local and remote concurrency, effectively side-stepping the Global Interpreter Lock by using subprocesses instead of threads. Due to this, the multiprocessing module allows the programmer to fully leverage multiple processors on a given machine.

根据我的理解,asyncio 让您的任务在事件循环(单进程)中运行,而多处理让您的 asyncio 任务同时在多个进程上运行,以便您可以充分利用机器的容量。

请从这个 link 进一步了解两者之间的区别。并且您可以尝试将 asynciomultiprocessing 结合起来,请引用以下线程:

1. What kind of problems (if any) would there be combining asyncio with multiprocessing?

2.github:https://github.com/dano/aioprocessing

关于python 3.7 对cosmos db的异步http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58630077/

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