app.run

Flask的app.run()方法利用Werkzeug的WSGI服务器实现并发处理。默认使用线程池模型,通过ThreadedMixIn创建线程来处理客户端请求,当线程池满时,新请求会被排队。可通过设置threaded和processes参数切换到多线程或多进程模式,以优化并发性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在Python的Flask框架中,app.run()方法的源码主要是通过werkzeug.serving模块提供的服务器运行器来实现的,可以在Flask应用程序初始化时指定服务器运行器,默认情况下使用Werkzeug中的WSGI服务Werkzeug的WSGI服务器主要是基于SocketServer和ThreadingMixIn实现的线程池模型。当应用程序启动并开始监听指定端口时,该服务器会创建一个新的线程,并生成一个新的socket实例以等待客户端连接。
一旦有客户端连接上来后,就会为其创建一个新的线程去处理该请求,并根据HTTP协议规范进行解析和响应处理。在多个客户端同时请求时,Werkzeug的线程池模型能够支持同时处理多个请求,并控制线程池个数。当有新的请求到来时,如果当前所有线程都处于繁忙状态,则新请求会进入队列中等待处理;如果空闲线程数不足,则会创建新的线程去处理该请求,直到达到最大线程数限制。
以下是Flask中app.run()方法中与并发请求相关部分的代码:

# flask/app.py

def run(self, host=None, port=None, debug=None, load_dotenv=True, **options):
    # ...
    from .serving import run_simple
    try:
        run_simple(host, port, self, **options)
    finally:


# ...
# flask/serving.py

def run_simple(hostname, port, application, **options):
    # ...
    server = make_server(hostname, port, application, threaded=True, **options)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        pass
# werkzeug/serving.py

class ThreadedMixIn(object):


# ...

class ForkingMixIn(object):


# ...

def make_server(host=None,
                port=None,
                app=None,
                threaded=False,# True 表示启用线程池模式
                processes=1,
                request_handler=None,
                passthrough_errors=False,
                ssl_context=None,
                **options):
    # ...

    if threaded:
        return ThreadedWSGIServer(
            threadpool_workers=processes,  # 线程池大小
            passthrough_errors=passthrough_errors,
            **server_options)

    elif processes > 1: #  表示启用多进程模式
        return ForkingWSGIServer(
            processes=processes,  # 进程数
            passthrough_errors=passthrough_errors,
            **server_options)

    else:
        return WSGIServer(
            passthrough_errors=passthrough_errors,
            **server_options)

通过上述代码可以看出,Flask中的app.run()方法主要是根据传入的host和port参数初始化一个Werkzeug的WSGI服务器,并通过指定的线程数或进程数来实现并发请求处理。其中,`threaded = True` 表示启用线程池模式,`processes > 1`表示启用多进程模式,而默认情况则是单线程单进程模式。同时,还可以根据业务需求调整线程池大小和进程数等参数来优化并发处理性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值