flask的自带web服务器怎么开很多进程或者线程?

目前在做一个多机管理程序。用flask做的web服务器,针对管理请求执行任务然后得到结果返回给前端页面(可以等)。

为了处理方便,没有使用nginx等web服务器。
为了处理方便,同一管理命令,针对每一个主机都从前端发一条命令到后端处理。(涉及到处理结果的显示问题,不想用其他模式)
后端处理就是是ssh登录到其他主机执行命令(时间很长,但是不消耗flask所在主机资源)

我现在要对大约50台机器发命令,现在每次发命令,flask都只开6个进程或者线程来处理6个请求,等几十分钟后再处理后面的请求。
无论使用的是默认的多线程模式,还是改为多进程模式,指定进程数为32、64或者更大,都只有6个进程在处理6个请求,处理完成之后才会处理后面的请求(要等很久)。

我希望前端发50个请求给后端后,后端能够开50个进程或者线程去处理。这样就不需要等这么久了,可不知道怎么处理。

追踪到flask内部进程数设置值processors被赋值给一个对象的max_children属性就没下文了,该属性没在代码中发现被使用。

阅读 7.8k
3 个回答

自己回答
找到源头了,不是flask的问题。处理连接时flask用的werkzeug,werkzeug用得socketserver。
socketserver默认同时最多处理5个请求,但werkzeug已经把值改为128了。
之所以每次只处理6个请求,是因为chrome浏览器限制每次最多6个请求,同时发许多请求只能发出6个,后面的都会等待。
等待发生在浏览器端而不是服务端。

run方法中有threaded参数,设置成True就可以了

建议还是上 NGINX + WSGI 吧,Flask 自带的服务器只适合开发调试用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题