3

私はJavaの中間開発者であり、Pythonの初心者であり、Webサービスの初心者です。学習体験として、私はPythonでRESTful Webサービスを実現し、RS232-over-USBリレーボードを介して単純なオン/オフライトをリモート制御しようとしています。web.pyとpyserialライブラリの基本はすでに理解しています。私が使用しているボードは、リレーをオン/オフにするための入力としてASCIIバイトを受け取り、送信されるすべての入力のフィードバックとしてASCIIバイトを提供します。単一のリクエストは正しい方法で応答されますが、web.py委任クラスによって複数のリクエストが発行されると、フィードバックが混同されることがあります。これはスレッド同期の問題だと思います。適切なWebにフィードバックを正しく送信するために、シリアルポートへの書き込み/読み取りアクセスをpyserialと同期するための最良の方法は何ですか。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
4

1 に答える 1

1

Webアプリが同じPythonインスタンス(web.py dev webserverに統合されて実行されている)で実行されている場合、ソリューションは問題ないようです。

fcntlただし、複数のPythonプロセスで実行する場合は、モジュールを使用してファイル自体にロックをかける必要があります。

于 2011-08-08T11:07:44.640 に答える