我是一名java中级开发人员,python新手和网络服务超级新手。 作为一种学习体验,我正在尝试在python中实现RESTful Web服务,通过RS232-over-USB中继板远程控制简单的开/关灯。 我已经找到了web.py和amp;的基础知识。 pyserial库。 我正在使用的电路板将ascii字节作为输入来打开/关闭继电器,并为每个发送的输入提供一个ascii字节作为反馈。 以正确的方式回答单个请求,但是当web.py委派的类发出多个请求时,反馈有时会混淆。我猜这是一个线程同步问题。 使用pyserial同步对串行端口的写/读访问的最佳方法是什么,以便正确地将反馈发送到适当的web.py-born线程?是否可以将以下解决方案视为正确?
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
答案 0 :(得分:1)
如果您的网络应用程序在同一个python实例下运行(运行在web.py dev webserver中集成),那么您的解决方案似乎没问题。
但是如果你想在多个Python进程下运行它,那么你必须使用fcntl
模块将锁定放在文件本身上。