私はLED照明を制御するアプリケーションを作成しました。色を変えるパターンをサポートしたいと思っていました。プログラムの他の部分を動作させるために、このセクションのコードは別のスレッドで実行されています。残念ながら、スレッドが開始されると、私のWebベースのインターフェース(フラスコ)を通して色循環パターンを変更することはできません。可変データをスレッド(color1、color2、およびspeed)に渡す方法はありますか?また、スレッドは親クラスからstopメソッドを継承するように構築されています。Pythonで実行中にスレッドに変数の変更を渡すにはどうすればよいですか?
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
私はスレッドでグローバル変数を使用してひんしゅくを買うされていることを理解します。ただし、スレッドは変数を変更していません。それは単にそれらを読む必要があります。