Python中的Flask多进程工作池

4

我对于实现我想做的事情最好的方式感到非常困惑。

我有一系列处理时间很长的作业,因此我想在应用程序启动时初始化一个大量的“工作者”池,以便在空闲时处理请求。

流程概述:

  • 在应用程序启动时创建10个分类器(工作者)并将它们保留在某个空闲的地方。
  • 当应用程序启动时,通过Flask POST命令传递请求。
  • 将请求传递给可用的分类器。
  • 分类器返回作业结果。

我该如何实现这个过程呢?

编辑:值得注意的是,分类器需要花费相当长的时间来启动,因此在将工作传递给它们之前,它们必须可用且已经运行。

class View(views.MethodView):
    def get(self):
        return render_template('index.html')

    def post(self):
        app_form_elements = request.form

    #Assumption button clicked on browser interface...

            jobs = ["job one", "job two", "job three"]

            for job in jobs: 
        #Send each job to next available classifier pool.



        return self.get()



app.add_url_rule('/', view_func=View.as_view('main'), methods=['GET','POST'])

app.debug = True

if __name__ == '__main__':
    app.run(threaded=True)

编辑:

分类器设置大致如下:

class Classifier():
    """
    Class will take in a classifier and a test data set and print out the overall accuracy.
    """
    def __init__(self):

        self.load = self.toSomeStuff()

        print('classifier initialised.\n')


    def doSomeWork(self):
    #Initialised classifier objects called with work to do.



initialise_classifier = Classifier()

#the jobs 
initialise_classifier.doSomeWork()

基本上我需要一个预先初始化的分类器池,然后能够通过post方法将每个作业传递给它们,并在其上调用“doSomeWork”函数。


难道不使用类似 celery 这样的队列来运行这些长时间进程更有意义吗? - Mark Hildreth
2个回答

2

在Flask中无法实现此功能。但是您可以使用uWSGI内置功能或类似Celery的任务队列来实现相同的结果。

请查看此答案以获取更多详细信息。


1

你可以启动任意数量的工作线程。如果需要更高的并发性,请查看 https://github.com/nvie/new_workers - Sergey Bargamon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接