我应该如何处理具有不同意图线程的锁获取和释放

时间:2019-04-25 17:47:10

标签: python-3.x multithreading at-command

我正在使用调制解调器,因此我需要“始终”检查可用的信号,以使其正常工作。

我有一个没有线程运行的代码,但不适用于持续的信号检查步骤。

我现在正在测试线程,但是在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

我尝试了几种不同的方法,但是结果没有改变。我的主要目标是让一个线程检查信号,而另一个只有在信号足够时才开始工作。

感谢您的时间!

0 个答案:

没有答案