python 多线程访问共享变量com口
时间: 2024-08-06 18:01:30 浏览: 50
python 多线程共享全局变量的优劣
5星 · 资源好评率100%
在Python中,多线程访问共享变量,特别是像串行端口(COM口)这样的资源时,如果没有适当的同步措施,可能会导致数据混乱。由于COM口是共享的硬件设备,多个线程同时读写可能会造成通信错误或丢失数据。
为了避免这个问题,你可以使用`threading.Lock()`创建一个锁(也称为互斥锁或锁对象),确保每次只有一个线程能操作COM端口。这里是一个简单的例子:
```python
import serial
import threading
# 创建全局锁
lock = threading.Lock()
# 初始化串口连接
ser = serial.Serial('COM1', baudrate=9600)
def read_from_com(port):
lock.acquire() # 获得锁
try:
while True:
data = ser.readline().decode('utf-8')
print(f'Received from COM: {data}')
except Exception as e:
print(f"Error reading from COM: {e}")
finally:
lock.release() # 释放锁,允许其他线程访问
# 创建并启动两个读取线程
t1 = threading.Thread(target=read_from_com, args=('COM1',))
t2 = threading.Thread(target=read_from_com, args=('COM2',))
t1.start()
t2.start()
t1.join()
t2.join()
```
在这个例子中,`lock.acquire()`确保在同一时间只有一个线程可以读取从COM口接收到的数据,而`lock.release()`在读取完成后恢复对锁的控制。
阅读全文