2016-02-16 89 views
0

在Flask中使用多处理ThreadPools实现多线程功能。使用线程池时使用Flask应用程序(使用UWSGI)

我的问题是,这是行不通的。当线程池被激活时,应用程序暂停。

如果我重新启动UWSGI服务器不能正常终止线程,所以它执行一个kill -9之前等待几分钟:

worker 1 (pid: 369) is taking too much time to die...NO MERCY !!!

谁能告诉我什么,我做错了?

我的代码看起来像这样(简化了一下):

from multiprocessing.dummy import Pool as ThreadPool 

    class BattleController(): 
     pool = None 

     def __init__(self): 
      self.pool = ThreadPool(2) 

     def do_work(self, info): 
      # This function is executed by a background thread. 
      print info 

     def start_async_work(self, info): 
      self.pool.map(self.do_work, [info]) 

我的看法是这样的:

app = Flask(__name__) 
controller = BattleController() 

@app.route('/api/test', methods=['POST']) 
def login(): 
    controller.start_async_work("Some info to process") 
    return "everything worked", 200 

回答

1

对于未来的读者: 不可能做我想做的事情(正如Oin指出的那样),但我找到了一个替代方案: Celery看起来像一个不错的Flask plug-in,使后台任务。