2016-07-08 17 views
1

私は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 

私はスレッドでグローバル変数を使用してひんしゅくを買うされていることを理解します。ただし、スレッドは変数を変更していません。それは単にそれらを読む必要があります。

答えて

0

可変データをスレッド (color1、color2、およびspeed)に渡す方法はありますか?

確かに、Queuesを見てください。

あなたがしなければならないことは、プロデューサーが色やスピードなどのデータをキューにプッシュし、消費者(スレッド)がそれらの変数をプルして作業できるようにすることです。

関連する問題