[Python2.7][Thread]Passage de variable
Bonjour à tous,
j'avais une petite question.
J'ai une application qui définit une classe parameters
J'ai un webservice rest qui permet de modifier les valeurs dans la classe parameters. La classe parameters est mise a disposition de la méthode du ws via l'instruction global. Lorsque je rentre dans le ws, le premier print ( print parameters.maxTemp)m'affiche la valeur avant changement et le second print m'affiche la valeur après le changement. A ce niveau là tout est ok.
Par contre dans le thread qui tourne toute les 30s, le print maxTemp m'affiche toujours la valeurde départ (initialisée par défaut au début de l'exécution). J'ai l'impression que l'objets parameters à 2 instances, mais je ne comprend pas pourquoi ?
voici le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#!/usr/bin/env python
import web
urls = (
'/temperature', 'get_temperature',
'/programs', 'get_programs',
'/mode', 'mode'
)
class parameters:
def __init__(self, sensor):
self.sensor = sensor
self.minTemp = 17.0
self.maxTemp = 20.6
self.mode = thermostatMode.auto
def load(self):
return None
def getCurrentTemperature(self):
print self.sensor.getTemperature()
return self.sensor.getTemperature()
sensor = DS18B20("/sys/bus/w1/devices/28-0000052f6b1b/w1_slave")
parameters = parameters(sensor)
app = web.application(urls, globals())
# WebService Method
class get_temperature:
def GET(self):
global sensor
temperatureDict = {}
temperatureDict["value"] = sensor.getTemperature()
return json.dumps(temperatureDict)
def PUT(self):
global parameters
form = web.input(name="temperature")
print parameters.maxTemp
parameters.maxTemp = form.temperature
print parameters.maxTemp
def manageHeater(parameters):
while True:
tC = parameters.getCurrentTemperature()
print 'Actual temperature: ' + str(tC)
print 'Actual mode: ' + str(parameters.mode)
print 'maxTemp: ' + str(parameters.maxTemp)
...
if __name__ == "__main__":
GPIO.setmode(GPIO.BCM)
thermostat = thread.start_new_thread(manageHeater, (parameters,))
app.run() |
Un grand merci d'avance