码迷,mamicode.com
首页 > 其他好文 > 详细

flask 并发

时间:2020-05-02 22:39:23      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:serve   out   header   RoCE   并发   task   _for   sleep   run   

flask 并发


1. 非并发

非并发时的情况:
注意需要在run中声明threaded=False
对,flask默认启用多线程;而flask_script默认不启用多线程。。。

  
    @app.route("/async")  
    def longtimetask():  
        time.sleep(20)  
        return ‘等待20秒结束。。。‘  

访问/async执行耗时任务,再访问/spider
结果就是正在等待响应,必需等待longtimetask()结束后才能响应下一个请求。

2. 并发-threads,processings

2.1. flask自带并发

flask自带两种并发模式:多线程,多进程
一般用于开发测试。

  
# 1.threaded : 多线程支持,默认为False,即不开启多线程;  
app.run(threaded=True)  
# 2.processes:进程数量,默认为1.  
app.run(processes=True)  

两者不能同时开启。

2.2. 使用genvent做协程

  
from genvent.wsgi import  WSGIServer  
from genvent import monkey  

monkey.patch_all()  
app = Flask(__name__)  
app.config.from_object(config)  
api = Api(app)  

db = DBInfo()  
# db_old = DBInfo_old()  

然后通过这种方式包装WSGIServer((address,port), app).serve_forever()
通过python code.py 的方法,来启动服务

2.3. Guicorn

通过Guicorn(with genvent)的形式来对app进行包装,来启动服务;
代码及启动项目

启动命令

gunicorn -c gun.py thread_explore:app
其中gun.py是gunicorn的配置文件
thread_explore是服务的主程序
app是flask的app
gun.py的具体内容:

  
import os  
import gevent.monkey  
gevent.monkey.patch_all()  
import multiprocessing  

# 服务地址(adderes:port)  
bind = 127.0.0.1;5000  
# 启动进程数量  
workers = multiprocessing.cpu_count() * 2 +1  
worker_class = ‘gevent‘  
threads = 20  
preload_app = True  
reload = True  
x_forwarded_for_header = ‘X_FORWARDED-FOR‘  

ps:这里启动进程数量应该是根据CPU个数来确定的,最好是2 * CPU数 + 1

flask 并发

标签:serve   out   header   RoCE   并发   task   _for   sleep   run   

原文地址:https://www.cnblogs.com/wodeboke-y/p/12819844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!