3

我是一名 java 中级开发人员、python 新手和 web 服务超级新手。作为学习经验,我正在尝试在 python 中实现一个 RESTful Web 服务,以通过 RS232-over-USB 继电器板远程控制简单的开/关灯。我已经弄清楚了 web.py 和 pyserial 库的基础知识。我正在使用的板将一个 ascii 字节作为输入来打开/关闭继电器,并为每个发送的输入提供一个 ascii 字节作为反馈。单个请求以正确的方式回答,但是当 web.py 委托类发出多个请求时,反馈有时会混淆。我猜这是一个线程同步问题。将串行端口的写入/读取访问与 pyserial 同步的最佳方法是什么,以便正确地将反馈发送到适当的网络。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
4

1 回答 1

1

如果您的 Web 应用程序在同一个 python 实例下运行(在 web.py dev webserver 中集成运行),您的解决方案似乎没问题。

但是如果你想在多个 Python 进程下运行它,那么你必须使用 module.lock 来锁定文件本身fcntl

于 2011-08-08T11:07:44.640 回答