对Python基底的原生App框架思考

为了兼容Python的扩展性系统框架,要将VS写的软件用Python重构。由于Python的GUI出了名的坑:wxPython构造不便,PyQt由于前后台数据传递的关系没准和VS一样成了一团糟,于是考虑用Flask的模式,将前后端分离。前端用HTML+CSS+js做显示渲染,后端用Python构造算法和控制逻辑,异步显示的问题用js完成。
虽然是本地应用,但这样设计的好处在于:

  • 完全分离了显示和算法的代码,使得并行开发成为可能。且专门负责显示和专门负责算法控制相互独立,测试起来也方便;
  • 前端用HTML+CSS+js的显示效果,比起灰溜溜的Win32程序,要漂亮得多;
  • Flask是基于Python的天然框架,所有用Python写的的计算和控制逻辑都可以轻松接入;
  • 跨平台,断依赖。VS 20xx redistributable再也不用装了,dll再也不会少了,ActiveX的坑也不会再遇到了;
  • 附带了控制界面远程访问的功能,也许会有一些想不到的场景优势;
  • 有js在前端,可以利用许多有趣的轮子和可视化框架。

但劣势在于:

  • 作为本地应用,做一个Flask网站,显然对于部署来说是比较麻烦;
  • 如果通过pyinstaller将网站打包,假设打包成功,将Flask完全做成了一个原生App,那么
    • 功能所需的硬件连接会不会有问题;
    • 软件所需的数据上下传,与本地环境会不会有问题;

整体结构:

  • 整体框架: Flask
  • 前端整体展示: HTML+CSS+js
  • 可视化展示: matplot(替换原OpenCV库)+plotly(替换原ActiveX插件的折线图)
  • 计算和流程控制逻辑: Python
  • 硬件抽象: Python或C
  • App打包: pyinstaller 1 2

其他选择:

  • 为啥不用纯Python框架的dash
    • dash将html代码混写在python代码里,对于debug和修改网页布局都略有不便,尤其是不方便在浏览器中做前端调试
  • socketio的使用
    • socketio是基于websocket的python包,用于实现websocket的数据传输方式。websocket可以达到C/S双向主动发起连接和推送数据,对于数据刷新的实时性有较好的提升。之前由于HTTP协议只能由C端发起请求,S端响应,因此如果前端展示想要刷新内容,只能使用定时器的方式(ajax的刷新就属于此类)。
  • 分发形态为啥不使用docker
    • docker的虚拟化,使得如果要在docker内部使用宿主机的硬件设备,需要在docker建立的profile中写好映射关系,使得docker容器内部的OS捕获宿主机的硬件资源。目前要开发的系统中,硬件资源接口各异,尤其是串口,可能无法实现自动映射。而且docker的体积有些太大了。
  • 分发用electron怎样
    • electron的后端逻辑是Node.js,想把基于Python的flask打进去实在是困难。
Comments
Write a Comment
'