【问题标题】:Python web app - synchronized serial accessPython Web 应用程序 - 同步串行访问
【发布时间】:2011-08-08 10:22:13
【问题描述】:

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

【问题讨论】:

    标签: python multithreading web-services web.py pyserial


    【解决方案1】:

    如果您的网络应用在同一个 python 实例下运行(运行集成在 web.py 开发网络服务器中),您的解决方案似乎没问题。

    但是如果你想在多个 Python 进程下运行它,那么你必须使用 fcntl 模块对文件本身进行锁定。

    【讨论】:

    • 感谢安德烈的快速回答。是的,它在同一个 pyhon 实例下运行。
    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多