我创建了一个控制LED照明的应用程序。我想支持换色模式。为了使程序的其他部分工作,这部分代码正在一个单独的线程中执行。不幸的是,一旦线程启动,我无法通过基于Web的界面(烧瓶)更改颜色循环模式。有没有办法让我将可变数据传递给线程(color1,color2和speed)?此外,线程的构造方式使其从父类继承stop方法。
app.py
from flask import Flask, render_template, request, jsonify
...
cycleToggle = "on"
@app.route("_/start")
def _start():
global cycleToggle
global thread
if cycleToggle=="on":
thread = Pins.cyclecolors()
thread.start()
cycleToggle = "off"
return render_template("cyclecolors.html") #flask
@app.route("/_stop")
def _stop():
global cycleToggle
cycleToggle = "on"
thread.stopit()
return render_template("cyclecolors.html")
@app.route("/_updateCycle")
def _updateCycle():
color1 = request.args.get('color1')
color2 = request.args.get('color2')
speed = request.args.get('speed')
Pins.updateCycle(color1,color2,speed)
Pins.py
import threading
...
class StoppableThread(threading.Thread):
def __init__(self):
super(StoppableThread, self).__init__()
self._stopper = threading.Event()
def stopit(self):
self._stopper.set()
def stopped(self):
return self._stopper.is_set()
class cyclecolors(StoppableThread):
def __init__(self):
StoppableThread.__init__(self)
def run(self):
while not self.stopped():
## THIS IS WHERE THE COLOR CYCLING CODE WOULD GO THAT UTILIZES
## THE color1, color2, AND speed VARIABLES.
def updateCycle(color_1, color_2, speed_a)
global color1
global color2
global speed
color1 = color_1
color2 = color_2
speed = speed_a
return
我明白使用带线程的全局变量是不受欢迎的;但是,线程没有改变变量。它只需要阅读它们。
答案 0 :(得分:0)
我有办法将变量数据传递给线程吗? (color1,color2和speed)?
当然,请查看Queues。
你需要做的是让生产者在队列中推送颜色,速度等数据,让你的消费者(线程)拉出这些变量并对它们进行处理。