Python web应用程序-同步串行访问

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委托类发出多个请求时,反馈有时会混淆。我猜这是一个线程同步问题。

我是java中级开发人员、python新手和web服务uber新手。 作为学习经验,我正在尝试用python实现一个RESTful web服务,通过RS232 over USB中继板远程控制一个简单的开/关指示灯。 我已经了解了web.py和pyserial库的基本知识。 我使用的电路板将一个ascii字节作为输入来打开/关闭继电器,并为每个发送的输入提供一个ascii字节作为反馈。 单个请求以正确的方式得到响应,但当web.py委托类发出多个请求时,反馈有时会混淆。我猜这是一个线程同步问题。 为了正确地将反馈发送到相应的web.py-born线程,将串行端口的读写访问与pyserial同步的最佳方法是什么?像下面这样的解决方案可以被认为是正确的吗

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实例下运行。