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 : Sélectionner tout - Visualiser dans une fenêtre à part
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