Flask:在一个请求中生成一个异步子任务

2024-04-20 00:57:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到了我的问题的一些变体,但不完全是我想要的,因此打开了一个新的问题。在

我有一个Flask/Gunicorn应用程序,每个请求都会在一个存储中插入一些数据,从而启动索引工作。索引的长度是主数据写入的2-4倍,我希望以异步方式来减少响应延迟。在

对于一个大型请求体,总的请求生命周期为100-150ms。在

我想了一些方法来做到这一点,即尽可能节省资源:

  • 用芹菜。这似乎是最明显的方法,但我不想介绍一个大型库,最重要的是,依赖于Redis或其他系统包。在
  • 使用subprocess.Popen。这可能是一条很好的路线,但我的瓶颈是I/O,所以线程可以更高效。在
  • 使用线程?我不确定如何以及是否能做到这一点。我只知道如何与ThreadPoolExecutor同时启动多个进程,但我只需要生成一个额外的任务,然后立即返回而不必等待结果。在
  • asyncio?这也是我不知道如何适用于我的情况。asyncio始终有一个阻塞调用。在
  • 同时启动数据写入和索引:不可行。我必须等待数据写入的响应才能启动索引。在

欢迎提出任何建议!在

谢谢。在


Tags: 数据方法redisasyncio应用程序flask系统方式
2条回答

实际上,我应该更好地阅读Python手册中关于并发性的部分:threading模块正是我所需要的:https://docs.python.org/3.5/library/threading.html

我用一些虚拟睡眠代码确认了子线程即使在Flask请求完成之后也会完成。在

芹菜将是你最好的选择-这正是它的用途。在

如果您需要引入依赖项,那么拥有依赖项并不是一件坏事。只要你没有不必要的依赖。在

不过,根据您的体系结构,可能会提供更高级和锁定的解决方案。如果您使用的是AWS,那么可以通过触发awsns通知来启动AWS Lambda函数,并让它处理它需要做的事情。天涯海角。在

相关问题 更多 >