使用线程池时 Flask 应用程序不工作(使用 UWSGI)
Flask application not working when using thread pool (using UWSGI)
我正在使用多处理线程池在 Flask 中实现多线程功能。
我的问题是它不起作用。当线程池被激活时,应用程序停止。
如果我重新启动 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
Flask 并非旨在支持您正在尝试做的事情:http://flask.pocoo.org/docs/latest/design/#thread-locals
对于未来的读者:
不可能做我想做的事情(正如 Oin 指出的那样),但我确实找到了另一种选择:
Celery looks like a nice Flask plug-in 启用后台任务。
我正在使用多处理线程池在 Flask 中实现多线程功能。
我的问题是它不起作用。当线程池被激活时,应用程序停止。
如果我重新启动 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
Flask 并非旨在支持您正在尝试做的事情:http://flask.pocoo.org/docs/latest/design/#thread-locals
对于未来的读者: 不可能做我想做的事情(正如 Oin 指出的那样),但我确实找到了另一种选择: Celery looks like a nice Flask plug-in 启用后台任务。