当前位置: 首页 > news >正文

长春财经学院占地面积家居seo整站优化方案

长春财经学院占地面积,家居seo整站优化方案,做标签网站是什么样的,网站站群怎么做最近在做的一个项目,需要将十几个python函数封装程flask服务供外界调用,每个函数之间没有什么关系,相互独立。虽然感觉不是很难,但因为用的windows系统,遇到的坑比较多,在此一一总结一下。 flask偶尔出现卡…

最近在做的一个项目,需要将十几个python函数封装程flask服务供外界调用,每个函数之间没有什么关系,相互独立。虽然感觉不是很难,但因为用的windows系统,遇到的坑比较多,在此一一总结一下。

flask偶尔出现卡死问题

见上一篇文章

不能高并发问题

因为十几个函数都要被调用,而且调用量不小,对响应时效性有较高要求,需要能充分利用CPU并行计算,采用了如下几个解决方法

1.flask + gevent + multiprocess + wsgi

在网上搜到这个解决方案
但不知道是系统原因还是我的算法原因,运行之后发现CPU占用量比较低,而且同时收到服务请求后是串行计算并返回的。看来这种方法在我这种情况下并不适用。

2.设置多线程

还有一个解决方法是代码运行时设置多线程,即输入命令
python 文件名.py runserver --threaded
但发现依然没有并行计算

3.设置多进程

这个解决方案是在代码的app.run()函数中设置process=n,n就是你想要的进程数。但设置之后报错,说是不能同时设置多线程和多进程。然后又在app.run()中设置threaded=False,发现又报错,可能是这个功能只支持linux系统而不支持windows

还看到nginx和gunicorn的方法,但是不知道这个对windows是否支持,而且好像有点麻烦就没有试

4.手动负载均衡

通过测试发现一个现象,就是flask并非完全串行,当同时接收到2个请求,如果执行第一个请求会占用计算资源,那么就是算完第一个再算第二个,而如果第一个请求的计算是等待(比如time.sleep)或者挂起状态,则会同时去处理第二个请求而不用等到第一个请求返回结果。
因此想到了一个解决方法,就是每个函数都单独启一个flask服务,对于耗时比较长的函数根据需求多启几个服务,每个服务设置的端口号不同,然后再启动一个对外的flask服务,外界所有请求都发送到这一个flask端口,然后这个端口内部再向对应的flask服务发送请求。
原始flask代码:

from flask import Flask, render_template
from gevent.pywsgi import WSGIServer
from gevent import monkey
import time
import jsonmonkey.patch_all()
app = Flask(__name__)@app.route('/')
def connect():return "connected test"@app.route('/index')
def index_test():time0 = time.time()for i in range(10000):j = list(range(1000))print(time.time() - time0)res = {'data':1}res = json.dumps(res)return resif __name__ == "__main__":server  = WSGIServer(("0.0.0.0", 5000), app)print("Server started")server.serve_forever()

测试调用代码:

import requests
from threading import Thread
import time
def req():time0 = time.time()res = requests.get('http://127.0.0.1:5000/index')print(time.time() - time0)# print(res.text)
for i in range(5):th = Thread(target=req)th.start()

结果:
fask端显示的结果为

0.5939996242523193
127.0.0.1 - - [2023-10-12 09:49:03] "GET /index HTTP/1.1" 200 127 0.600002
0.48799610137939453
127.0.0.1 - - [2023-10-12 09:49:04] "GET /index HTTP/1.1" 200 127 0.488996
0.5429947376251221
127.0.0.1 - - [2023-10-12 09:49:04] "GET /index HTTP/1.1" 200 127 0.544997
0.4839961528778076
127.0.0.1 - - [2023-10-12 09:49:05] "GET /index HTTP/1.1" 200 127 0.485996
0.4319908618927002
127.0.0.1 - - [2023-10-12 09:49:05] "GET /index HTTP/1.1" 200 127 0.434000

请求发送端显示的结果是

1.0300004482269287
1.3990015983581543
1.8730018138885498
2.3450255393981934
2.831998586654663

收到返回的时间却在逐渐增加,说明没有并行计算

改进代码:
入口flask代码:

from flask import Flask, render_template
from gevent.pywsgi import WSGIServer
from gevent import monkey
import requests
import time
import jsonmonkey.patch_all()
app = Flask(__name__)
path_num = {'num':-1}
@app.route('/')
def connect():return "connected test"@app.route('/index')
def index_test():# time0 = time.time()# for i in range(10000):# 	j = list(range(1000))# print(time.time() - time0)# res = {'data':1}# res = json.dumps(res)if path_num['num'] > 4:path_num['num'] = 0else:path_num['num'] += 1num = path_num['num']url = f'http://127.0.0.1:{9030+num}/index'res = requests.post(url=url)return res.textif __name__ == "__main__":server  = WSGIServer(("0.0.0.0", 5000), app)server.serve_forever()# app.run()

算法flask代码

from flask import Flask, render_template
from gevent.pywsgi import WSGIServer
from gevent import monkey
import time
import jsonmonkey.patch_all()
app = Flask(__name__)@app.route('/')
def connect():return "connected test"@app.route('/index')
def index_test():time0 = time.time()for i in range(10000):j = list(range(1000))print(time.time() - time0)res = {'data':1}res = json.dumps(res)return resif __name__ == "__main__":server  = WSGIServer(("0.0.0.0", 9030), app)print("Server started")server.serve_forever()# app.run()

这里的算法flask代码启动了5个,接口分别是9030~9034
用同样的方式测试,返回的结果为

0.0500025749206543
0.05100274085998535
0.050002098083496094
0.05200028419494629
0.062003135681152344

差不多同时返回

总结

虽然最后一种方式有点麻烦,但可以解决现有问题,其中算法flask服务启动的越多性能越好。

http://www.tj-hxxt.cn/news/16704.html

相关文章:

  • 如何在网站上做背景图片怎么做裤子seo关键词
  • 分销平台有哪些?廊坊seo培训
  • 苏州建设交通职业技术学院短视频seo推广隐迅推专业
  • 哪里可以做虚拟货币网站网站推广软件下载安装免费
  • 微信代运营协议优化网站最好的刷排名软件
  • 慈云寺网站建设线上平台推广方式
  • 编辑网站的软件爱站网seo工具包
  • 手机版的网站用什么开发免费s站推广网站
  • asp网站开发国内外现状怎样查询百度收录和排名情况
  • 凡科互动游戏怎么修改程序昆明百度搜索排名优化
  • 音乐网站怎么做社交的长沙专业seo优化公司
  • 做个网站需要学会什么龙岗网站推广
  • php网站开发实战视频教程如何做平台推广赚钱
  • 王者荣耀网页制作素材潍坊seo计费
  • 用html做家谱网站代码百度快照如何优化
  • 网页设计与制作的公司有必要买优化大师会员吗
  • 健身网站开发项目总结烟台百度推广公司
  • 做电脑系统网站关键词热度
  • 麻涌镇网站仿做百度网盘登录首页
  • 网站建设作业教程千万不要学网络营销
  • 个人淘宝客网站有哪些百度账号登录
  • 广州网站建设推广攀枝花seo
  • 口碑好的聊城网站建设短视频运营
  • 内蒙古手机网站制作html网页设计模板
  • 杭州网站推广优化公司温州网站快速排名
  • 可以做网站的软件指数网站
  • 网站技术介绍抖音seo教程
  • 国际要闻百度seo怎么做网站内容优化
  • 网站建设与维护试卷及答案最新百度快速排名技术
  • 宣传片素材网站线上推广方案