近期在做项目的过程中,出现不少的问题,现在讲问题总结一下。
一、有一组数据每0.5秒更新一次,按照之前的逻辑来说的话,就是前台实现轮询操作,每隔0.5秒请求一次数据,这样数据才能更新。但是觉得这样会比较消耗资源,如果发现可以使用Flask_socketio这个模块实现推送数据。
1.下载该模块
pip install flask_socketio
2.将该模块注册给app
app 下的__init__文件
# sock路由
app.register_blueprint(sock, url_prefix='/sock')
# 注册socketio
socketio.init_app(app=app, async_mode=async_mode)
3.manage.py文件
# 绑定socketio
manager.add_command('run', socketio.run(app=app, host='0.0.0.0', port=8081))
注:在项目生成数据脚本需要隐藏这句代码,才能生成数据模型
4.game_socket.py文件中导入该模块
socketio=SocketIO()
sock = Blueprint('sock', __name__)
# 服务端接受客户端发送的通信请求
@socketio.on('connect_event', namespace='/websocket/user_refresh')
def connect_event():
global thread
with thread_lock:
if thread is None:
# 开启线程获取数据,并将数据推送到指定路由
thread = socketio.start_background_task(background_thread1)
总结:1.在使用此长链接推送时,前台会在进入APP后即建立链接,这样会比较消耗资源,而且在退出游戏界面的时候,长链接也没有断开,所以才此方法:在进入APP后开始建立长链接时就将长链接断开,进入游戏后再建立长链接,在退出A游戏后就将长链接直接断开
2.我在项目中使用到flask_socketio模块,同时我同事也使用了websocket,在他的项目上线后,我的flask_socketio模块就没办法使用了,起初我也不知道是这个的原因,后面我在排查了大半天的错误,终于发现我的项目在隐藏flask_socketio模块之后,就可以正常的运行,因此我就认为是这个问题,后面只好新进一个虚拟环境进行部署项目,这样每个人的项目都不会受到影响。
二、python虚拟环境的使用
1.linux系统下虚拟环境的操作步骤
# 1.新建目录
mkdir 目录
# 2.新建python虚拟环境
python -m venv qkgd_venv (虚拟环境名称)
# 3.进入虚拟环境,进入虚拟环境后命令前会出现虚拟环境的名称
source qkgd_venv/bin/activate
# 4.使用虚拟环境启动项目
python manage.py runserver
# 5.退出虚拟环境
deactivate
具体可参考文档:http://docs.jumpserver.org/zh/docs/step_by_step.html
三、使用python 模块需求文件
在服务器部署项目的过程可能会需要安装很多的依赖模块,可以将项目需要的模块生成一个需求文件,然后在服务器上直接安装这个需求文件即可
1.生成需求文件命令,将项目需要的模块导向到txt文件
pip freeze 项目名 > requirements.txt
2.创建完虚拟环境后,下载需要的模块
pip install -r requirements.txt
3.同时需要注意安装的模块版本
我在生成需求文件的时候,下载了redis3的版本,但是我应该需要使用redis2的版本,所以应该注意项目需要的模块版本。
四、flask_sqlalchemy 多条件联合查询
ks_time:开始时间戳
js_time:结束时间戳
# 查询指定用户的指定时间段的数据
lottery_list = User_lottery.query.filter_by(user_id=i.id).filter(ks_time2 < User_lottery.date).filter(User_lottery.date < js_time2).all()
网友评论