首页   注册   登录
 ox180 最近的时间轴更新
ox180

ox180

V2EX 第 207633 号会员,加入于 2016-12-26 12:00:54 +08:00
ox180 最近回复了
211 天前
回复了 fyxtc 创建的主题 程序员 看了 Flutter 的 80%的官方文档内容,感觉很好
哪位大佬来一个美颜的 sdk ??
观望。。。
2018-09-11 08:50:53 +08:00
回复了 bbbai 创建的主题 程序员 预算 3000,需求明确求推荐笔记本电脑
2018-09-09 09:25:19 +08:00
回复了 smh2208 创建的主题 Python Python web 后端进阶项目
@smh2208 如果纯后端的话,Java 会是一个非常不错的选择,如果不是非 Python 不学的话,以 Java 作为谋生手段更好...真无奈,而像一楼说到的那些,其实和语言本身没有太多关联性,祝好运
2018-07-26 08:49:57 +08:00
回复了 KeatingSmith 创建的主题 Python Flask 自带的服务器是怎样处理请求的?
@gnozix 如上描述
2018-07-24 17:59:04 +08:00
回复了 KeatingSmith 创建的主题 Python Flask 自带的服务器是怎样处理请求的?
问题一:
由于 Flask 代码中默认启用了多线程,如下:

```python
# 大致在 936 行
options.setdefault('use_reloader', self.debug)
options.setdefault('use_debugger', self.debug)
options.setdefault('threaded', True) # here

cli.show_server_banner(self.env, self.debug, self.name, False)

from werkzeug.serving import run_simple

try:
run_simple(host, port, self, **options) # 此处启动 server
finally:
# reset the first request information if the development server
# reset normally. This makes it possible to restart the server
# without reloader and that stuff from an interactive shell.
self._got_first_request = False
```

然后再往下走,此处忽略,然后最终到达:

```python
def make_server(host=None, port=None, app=None, threaded=False, processes=1,
request_handler=None, passthrough_errors=False,
ssl_context=None, fd=None):
"""Create a new server instance that is either threaded, or forks
or just processes one request after another.
"""
if threaded and processes > 1:
raise ValueError("cannot have a multithreaded and "
"multi process server.")
elif threaded:
return ThreadedWSGIServer(host, port, app, request_handler,
passthrough_errors, ssl_context, fd=fd)
elif processes > 1:
return ForkingWSGIServer(host, port, app, processes, request_handler,
passthrough_errors, ssl_context, fd=fd)
else:
return BaseWSGIServer(host, port, app, request_handler,
passthrough_errors, ssl_context, fd=fd)
```
所以默认使用的是多线程方式,所以解决了问题 1



问题二:


-w 表示启动多少个 worker,简单来讲就是启动几个 flask app 副本,一种简单实现方式:


```python

# 伪代码
def start(app, worker=4, *args, **kwargs):

workers = [Process(target=app, args=()) for _ in range(worker))
for _worker in workers:
_worker.start()
# 如果你看 sanic,其实也是这个实现方式
```

所以关于 gunicorn,我的理解就是启动-w 个 flask 程序,如你描述那就是 4 个 flask 进程,至于是不是单进程多线程方式,那是另外一个问题了....
可以自己开发
2018-04-27 10:06:06 +08:00
回复了 1500176279 创建的主题 Python 大佬们, flsak 入门有什么建议?比如有那些号资源推荐
推荐狗书,看完后顺带看下官网文档,深入理解下各个环节,基本就 ok 了
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3095 人在线   最高记录 5168   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 08:13 · PVG 16:13 · LAX 00:13 · JFK 03:13
♥ Do have faith in what you're doing.