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

时间:2011-08-08 10:22:13

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

我是一名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

1 个答案:

答案 0 :(得分:1)

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

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