我已经看到了我的问题的一些变体,但并不完全是我正在寻找的,因此开启了一个新问题。
我有一个Flask / Gunicorn应用程序,每个请求都会在商店中插入一些数据,从而启动索引作业。索引是主数据写入的2-4倍,我希望异步执行此操作以减少响应延迟。
对于大型请求正文,整个请求的生命周期为100-150毫秒。
我已经考虑过几种方法,尽可能节省资源:
subprocess.Popen
。这可能是一条很好的路线,但我的瓶颈是I / O,因此线程可能更有效率。ThreadPoolExecutor
同时启动多个进程,但我只需要生成一个额外的任务,并立即返回而不等待结果。 asyncio
?这也是我不知道如何适用于我的情况。 asyncio
始终有阻止通话。 欢迎任何建议!
感谢。
答案 0 :(得分:0)
芹菜将是你最好的选择 - 它正是它的用途。
如果您需要引入依赖项,那么拥有依赖项并不是一件坏事。只要您没有不必要的依赖项。
但是,根据您的体系结构,可能会提供更高级和锁定的解决方案。如果您正在使用AWS,则可以通过触发AWS SNS通知来启动AWS Lambda函数,并让它处理它需要执行的操作。天空是极限。
答案 1 :(得分:0)
我实际上应该更好地阅读关于并发性的Python手册部分:threading
模块正是我所需要的:https://docs.python.org/3.5/library/threading.html
我确认了一些假睡眠代码,即使Flask请求完成后子线程也会完成。