Python AIOHTTP:快速回复帖子,但在后台处理其数据

Python AIOHTTP:快速回复帖子,但在后台处理其数据,python,python-asyncio,aiohttp,Python,Python Asyncio,Aiohttp,我有一个ANPR(自动车牌读取)系统。基本上配置了几个摄像头。它们将HTTP发布到我们配置的位置。我们面临的问题包括: 我们的脚本需要将这些数据发送到多个有时速度较慢的地方 相机在发帖时会锁定 因此,如果我的脚本需要15秒才能完成,那么我们可能会错过一次阅读 这是我目前剧本的精简版本。为3.4语法道歉,我们在现场有一些旧机器 @asyncio.coroutine def handle_plate_read(request): post_data = yield from reques

我有一个ANPR(自动车牌读取)系统。基本上配置了几个摄像头。它们将HTTP发布到我们配置的位置。我们面临的问题包括:

  • 我们的脚本需要将这些数据发送到多个有时速度较慢的地方
  • 相机在发帖时会锁定
因此,如果我的脚本需要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推回摄像机(并断开连接)并继续处理数据,或者轻松地将该步骤推迟到摄像机连接完成后?

如果我正确理解了您的问题,当然,您可以在响应之后立即继续处理数据,或者将其转移到以后的处理中

以下是简单解决方案的外观:

  • 在响应之前,不要做慢动作,而是添加所需的数据 对一些具有无限大小和返回响应的用户执行此操作 我很高兴

  • 在后台运行一些程序来处理速度较慢的作业 从队列中获取数据。任务本身与其他任务并行运行 协同路由,并且不会阻止它们。()

  • 因为“慢东西”可能与CPU有关,所以您可能会 需要与
    ProcessPoolExecutor一起使用才能执行
    其他过程中的慢动作。()

  • 这在基本情况下应该有效

    但是你也应该考虑一下它在重载下是如何工作的。例如,如果您快速地获取慢数据,但处理速度要慢得多,那么您的队列将增长,并且内存将耗尽

    在这种情况下,将数据存储在DB中而不是队列中是有意义的(您可能需要创建单独的任务来在不阻塞响应的情况下将数据存储在DB中)<代码>异步IO
    具有多个DB的驱动程序