Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 古尼科恩和/或芹菜:如何将两者都发挥到最佳效果?_Python_Concurrency_Celery_Gunicorn - Fatal编程技术网

Python 古尼科恩和/或芹菜:如何将两者都发挥到最佳效果?

Python 古尼科恩和/或芹菜:如何将两者都发挥到最佳效果?,python,concurrency,celery,gunicorn,Python,Concurrency,Celery,Gunicorn,我有一个机器学习应用程序,它使用flask来公开api(对于生产来说,这不是一个好主意,但即使我将来使用django,这个问题的想法也不会改变) 主要问题是如何为我的应用程序提供多个请求。几个月前,为了解决这个问题,添加了芹菜。在芹菜中繁殖的工人数量等于机器中的核心数量。对于很少的用户来说,这看起来不错,并且已经投入生产一段时间了 当并发用户的数量增加时,显然我们应该对其进行性能测试。事实证明:它能够为30GB和8核机器处理20个用户,无需身份验证,也无需任何前端。这看起来不是个好数字 我不知道

我有一个机器学习应用程序,它使用flask来公开api(对于生产来说,这不是一个好主意,但即使我将来使用django,这个问题的想法也不会改变)

主要问题是如何为我的应用程序提供多个请求。几个月前,为了解决这个问题,添加了
芹菜。在
芹菜
中繁殖的工人数量等于机器中的核心数量。对于很少的用户来说,这看起来不错,并且已经投入生产一段时间了

当并发用户的数量增加时,显然我们应该对其进行性能测试。事实证明:它能够为30GB和8核机器处理20个用户,无需身份验证,也无需任何前端。这看起来不是个好数字

我不知道有这样的东西:应用服务器、web服务器、模型服务器。当谷歌搜索这个问题时:
gunicorn
是一个很好的应用服务器python应用程序

  • 我应该使用
    gunicorn
    或任何其他应用程序服务器以及
    芹菜
    ,为什么
  • 如果我移除
    芹菜
    ,并且只在应用程序中使用
    gunicorn
    ,我就可以实现并发性。我在某个地方读到过
    芹菜
    不适合机器学习应用
  • gunicorn
    芹菜
    的用途是什么。我们如何才能实现两者的最佳结合

注意:主要目标是最大化并发性。在产品中服务时,将添加身份验证。在生产过程中,一个前端应用程序可能会在这两者之间起作用。

烧瓶中没有羞耻感。如果实际上您只需要一个web API包装器,
flask
可能是比
django
好得多的选择(因为
django
非常庞大,您只需要使用它的一小部分功能)

然而,您的并发性问题显然源于这样一个事实:您正在对每个请求进行一些繁重的处理。根本没有办法解决这个问题;如果每个请求都需要一定数量的计算资源,则无法将其变魔术。从现在开始,这是一个杂耍表演

  • 如果您希望立即得到有保证的响应,那么您需要有尽可能多的工作人员作为潜在的同步请求。如果不能在一台服务器上找到足够的资源,这可能涉及多台服务器上的负载平衡。(cue
    gunicorn
    ,一个web应用程序服务器,负责接受连接,然后将其分发到多个应用程序进程。)

  • 如果你同意不立即得到回应,你可以让东西排队。(cue
    cellery
    ,一个任务队列,工作进程可以使用它来检索下一件要做的事情,并存放结果)。如果在相同的请求-响应周期中不需要响应,那么这种方法最有效;e、 g.您从客户处提交了一份工作,而他们只收到一份工作已收到的确认书;您需要第二个请求来询问作业的状态,如果作业已完成,还可能询问作业的结果

  • 或者,您可以使用
    websockets
    或Tornado来代替Flask,在客户端可用时将响应推送到客户端(而不是用户轮询结果,或等待实时HTTP连接并占用服务器进程)


为什么在生产中使用Flask公开API不是一个好主意?因此:“Flask的内置服务器不适合生产”(emphasis mine)-而不是“Flask不适合生产”。这是有区别的。本页其余部分全部用于推荐的不同设置。@Abhisek因此请使用不同的服务器,并将flask…标记为以下内容的副本: