gpt4 book ai didi

python - AIOHTTP:快速响应 POST,但在后台处理其数据

转载 作者:行者123 更新时间:2023-11-30 22:35:37 25 4
gpt4 key购买 nike

我有一个 ANPR(自动车牌读取)系统。基本上配置了几个摄像头。这些将 HTTP POST 发送到我们配置的位置。我们的问题如下:

  • 我们的脚本需要将此数据发送到多个有时速度较慢的位置。
  • 相机在发布时锁定。

因此,如果我的脚本需要 15 秒才能完成(这是可以的),我们可能会错过一次读取。

这是我目前脚本的精简版本。对于 3.4 语法,我们深表歉意,我们现场有一些旧机器。

@asyncio.coroutine
def handle_plate_read(request):
post_data = yield from request.post()
print(post_data)

# slow stuff!

return web.Response()

app = web.Application()
app.router.add_post('/', handle_plate_read)
web.run_app(app, port=LISTEN_PORT)

这是功能性的,但我可以提前将 200 推回到相机(并断开连接)并继续处理数据,或者轻松地将该步骤推迟到处理相机连接之后吗?

最佳答案

如果我正确理解你的问题,你当然可以在响应后立即继续处理数据,或者推迟到稍后处理。

简单的解决方案如下所示:

  1. 不要在响应之前做缓慢的事情,而是添加所需的数据对某些人这样做Queue具有无限的大小和返回响应立即。

  2. 运行一些Task在后台处理缓慢的工作从队列中抓取数据。任务本身与其他任务并行运行协程并且不会阻止它们。 (more info)

  3. 由于“慢速内容”可能与 CPU 相关,因此您会需要使用run_in_executor使用 ProcessPoolExecutor 来做其他进程中的缓慢内容。 (more info)

这应该适用于基本情况。

但是您还应该考虑它在重负载下如何工作。例如,如果您快速获取慢速数据的数据,但处理速度慢得多,您的队列将会增长,并且您将耗尽 RAM。

在这种情况下,将数据存储在数据库中而不是队列中是有意义的(您可能需要创建单独的任务来将数据存储在数据库中而不阻塞响应)。 asyncio 具有许多数据库的驱动程序,for example

关于python - AIOHTTP:快速响应 POST,但在后台处理其数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44498461/

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