在Flask中使用.getJSON请求时,只运行一次命令
Run command only once when request with .getJSON in Flask
我正在尝试制作一个web界面,使用Pyserial显示Arduino的串行输出。我正在使用Ajax($.getJSON)来更新我的HTML字符串。
我现在遇到的问题是,每次请求JSON数据时,它都会初始化我的ser = serial.Serial('/dev/cu.wchusbserialfa140',9600)
,这会使查询速度变慢,并禁止串行输出的实时更新。
我的代码如下:
我正在尽力只执行一次serial.Serial()
。
@app.before_request
def before_request():
g.status = False
@app.route('/')
def template():
return render_template('index.html')
@app.route('/result')
def serial_monitor():
#connect to serial port for once
if g.status == False:
ser = serial.Serial('/dev/cu.wchusbserialfa140',9600)
g.status = True
result = str(ser.readline())
voltage = {'value':result}
else:
result = str(ser.readline())
voltage = {'value':result}
return jsonify(voltage)
我的javascript:我正在使用setInterval
自动重复它。
$.getJSON($SCRIPT_ROOT + '/result', function(data)
{$('#voltage').text(data.value);});
我一直在努力学习制作我的小网页界面,Stackoverflow对我帮助很大。我已经搜索并努力解决这个问题,但我认为现在值得联系。提前感谢大家!!
编辑:
我对它进行了一些黑客攻击,以使它做我现在想做的事情。然而,我计划在运行serial.Serial
行之前使用一个表单从用户那里获取端口值。我还在看session/global variable
路线。
global ser
ser = serial.Serial('port',9600)
@app.route('/')
def template():
return render_template('index.html')
@app.route('/result')
def serial_monitor():
result = str(ser.readline())
voltage = {'value':result}
return jsonify(voltage)
以下是我找到的解决方案。
通过正确设置全局变量状态(在函数内部),我现在可以只运行一次任何代码。
@app.route('/')
def template():
return render_template('index.html')
status = False
@app.route('/result')
def serial_monitor():
global status
#connect to serial port for once
if status== False:
ser = serial.Serial('/dev/cu.wchusbserialfa140',9600)
status = True
result = str(ser.readline())
voltage = {'value':result}
return jsonify(voltage)
也许可以将ser
保留为全局变量(尽管如果您使用多个基于流程的工作者,这可能会成为一个问题),这样您就不必每次都打开它,只需打开seek
或任何需要进入正确状态的东西(我对serial
一无所知,所以这可能有意义,也可能没有意义)。或者voltage
也可以是全局的,并在后台线程中不断更新,因此serial_monitor
函数只需要读取变量的最新值。
相关文章:
- http.listen()在运行时接受终端命令
- 如何在没有单词的情况下从命令行运行Node.js程序'节点'
- 在Flask中使用.getJSON请求时,只运行一次命令
- 打开时运行命令的Illustrator文件
- 使用 gulp 运行命令以启动 Node.js 服务器
- 在 Javascript 中运行命令 Wscript.shell ActiveX
- 在 Grunt 任务中运行命令
- 在使用jQuery弹出文件选择之前运行命令
- Gnome shell扩展:如何使用管道运行命令
- 使用NodeJS在特定目录中运行命令
- 在尝试运行命令时处理Yeoman自定义生成器中的错误事件
- JQuery文档未按预期运行命令
- jQuery ifElse语句未运行'命令
- JavaScript到Java Applet使用DeployJava.js运行命令行
- 从网页打开Windows运行命令
- 如何在Visual Studio 2010中对文件系统更改运行命令
- 运行命令出错:构建脚本返回非零退出码;将Gatsby JS站点部署到netflix时
- 我可以从我的脚本登录到linux机器,运行命令并获得输出吗?
- 如何让Dojo复选框运行命令
- 如何在qoxdoo中运行命令行脚本