Python web应用 - 同步串口访问
我是一名中级Java开发者,刚开始学习Python,对网络服务也很陌生。为了学习,我正在尝试用Python实现一个RESTful网络服务,通过一个RS232转USB的继电器板远程控制一个简单的开关灯。我已经掌握了web.py和pyserial库的一些基础知识。
我使用的这个继电器板需要一个ASCII字节作为输入来控制继电器的开关,并且每次发送输入时都会返回一个ASCII字节作为反馈。单个请求的响应是正确的,但当web.py的代理类发出多个请求时,反馈有时会混淆。我猜这可能是线程同步的问题。
那么,如何才能正确地同步对串口的读写访问,以便将反馈准确地发送给相应的web.py线程呢?像下面这样的解决方案是否可以被认为是正确的?
from threading import RLock
import serial # pyserial library
lock = RLock()
ser = serial.Serial("/dev/ttyACM0", 9600, 1)
def serialOut(self, string):
lock.acquire()
data = ''
try:
ser.open()
ser.write(string)
data = ser.readall()
ser.flushOutput()
finally:
lock.release()
return data
1 个回答
1
如果你的网页应用是在同一个Python实例下运行的(也就是在web.py的开发服务器里运行),那么你的解决方案看起来没问题。
但是,如果你想在多个Python进程下运行它,就需要使用fcntl
模块来对文件本身加锁。