Hallo,
ich möchte, das in einem Thread ein Programmbereich komplett ausgeführt
wird und das in diesem Zeitraum keine anderen Threads aufgerufen werden.
Das sollte ja eigentlich mit der Lock-Funktion funktionieren.
In der Zeile 53 steht die Funktion tlock.acquire() und in der Zeile 65 tlock.release().
Bis der Bereich dazwischen abgearbeitet ist, das dauert eine Weile.
Der andere Thread (Testthread) läuft inzwischen aber munter weiter.
Was mache ich falsch, sollte doch eigentlich ganz einfach sein?
Gruß Reinhard
Python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from tkinter import *
from sht_sensor import Sht
import RPi.GPIO as GPIO
import wiringpi as wiringpi
import time
import threading
tlock = threading.Lock()
sht = Sht(23, 24)
GPIO.setmode(GPIO.BCM)
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(18,2)
wiringpi.pwmSetClock(2000)
wiringpi.pwmWrite (18,900)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.output(27, GPIO.LOW)
file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
w1_slaves = file.readlines() # Read 1-wire slaves list
file.close() # Close 1-wire slaves list
def DS18B20_auslesen():
Zaehler=0
for line in w1_slaves:
Zaehler=Zaehler+1
w1_slave = line.split("\n")[0] # Extract 1-wire slave
file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
filecontent = file.read()
file.close() # Close 1-wire slave file
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
return temperature
def Testthread():
while True:
print('Testthread')
time.sleep(10)
def Tread_messen():
Sekunden=0
while True:
DS18B20_auslesen()
time.sleep(5)
Sekunden=Sekunden+5
if Sekunden > 60:
Temp_merk = DS18B20_auslesen() + 5
Sekunden=0
GPIO.output(27, GPIO.HIGH) #Heizung ein
tlock.acquire()
print("Start!")
now = time.time() #die alte Zeit
while DS18B20_auslesen() < Temp_merk:
Sekunden=Sekunden+1
GPIO.output(27, GPIO.LOW) #Heizung aus
later = time.time() #die neue Zeit
difference = int(later - now) #Zeitdifferenz
print("diff")
print(difference)
print("Stop!")
print(Sekunden)
tlock.release()
Sekunden=0
meinThread1=threading.Thread(target=Testthread)
meinThread1.start()
Thread2_EF=threading.Thread(target=Tread_messen)
Thread2_EF.start()
while True:
time.sleep(1)
Alles anzeigen