Я работаю с модемом, и мне нужно проверить сигнал, доступный постоянно, чтобы он работал правильно.
У меня есть код, работающий без потоков, но он не работает с этапом постоянной проверки сигнала.
Я сейчас тестирую потоки, но у меня проблемы с операцией release ().
Мой код:
lock = threading.Lock()
def checking_signal():
while True:
with lock:
print('Lock Acquired')
x = ser.readline()
y = x.rstrip()
z = y.decode('utf-8')
print(z)
ser.write(str.encode('AT+CSQ\r'))
time.sleep(5)
if (z.startswith("+CSQ")):
a = int(z[5])
if a >= 3:
print('Qualidade do sinal', z[5], 'é suficiente')
Signal = True
#read_mt_message()
lock.release()
time.sleep(6)
else:
print('Buscando Sinal...')
lock.release()
time.sleep(0.5)
t = threading.Thread(target = checking_signal)
t.start()
Работает, проверяя сигнал 2 раза, затем возвращает ошибку:
Exception in thread Thread-5:
Traceback (most recent call last):
File "/home/anaconda3/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/home/anaconda3/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-2-03211eb25532>", line 44, in checking_signal
time.sleep(0.5)
RuntimeError: release unlocked lock
Я пробовал несколько разных подходов, но результат не меняется. Моя главная цель - чтобы один поток проверял сигнал, а другой начал работать, только если сигнала достаточно.
Спасибо за ваше время!