Python web应用程序-同步串行访问
我是java中级开发人员、python新手和web服务uber新手。 作为学习经验,我正在尝试用python实现一个RESTful web服务,通过RS232 over USB中继板远程控制一个简单的开/关指示灯。 我已经了解了web.py和pyserial库的基本知识。 我使用的电路板将一个ascii字节作为输入来打开/关闭继电器,并为每个发送的输入提供一个ascii字节作为反馈。 单个请求以正确的方式得到响应,但当web.py委托类发出多个请求时,反馈有时会混淆。我猜这是一个线程同步问题。 为了正确地将反馈发送到相应的web.py-born线程,将串行端口的读写访问与pyserial同步的最佳方法是什么?像下面这样的解决方案可以被认为是正确的吗Python web应用程序-同步串行访问,python,multithreading,web-services,web.py,pyserial,Python,Multithreading,Web Services,Web.py,Pyserial,我是java中级开发人员、python新手和web服务uber新手。 作为学习经验,我正在尝试用python实现一个RESTful web服务,通过RS232 over USB中继板远程控制一个简单的开/关指示灯。 我已经了解了web.py和pyserial库的基本知识。 我使用的电路板将一个ascii字节作为输入来打开/关闭继电器,并为每个发送的输入提供一个ascii字节作为反馈。 单个请求以正确的方式得到响应,但当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
如果您的web应用程序在同一个python实例下运行(在web.py dev webserver中集成运行),那么您的解决方案似乎还可以
但是如果您想在多个Python进程下运行它,那么必须使用
fcntl
模块锁定文件本身。感谢Andrey的快速回答。是的,它在同一个pyhon实例下运行。