2011-08-08 8 views
3

私はJava中間開発者、Python初心者およびWebサービス初心者初心者です。 学習経験として、PythonでRESTful Webサービスを実現しようとしています。これは、RS232-over-USBリレーボードを介して簡単なオン/オフライトをリモートコントロールします。 私はすでにweb.py & pyserialライブラリの基礎を理解しました。 私が使用しているボードは、asciiバイトを入力として使用してリレーをオン/オフし、送信されたすべての入力に対するフィードバックとしてasciiバイトを提供します。 単一のリクエストには正しい答えが返されますが、web.py委任クラスによって複数のリクエストが発行されると、フィードバックが混同されることがあります。私はこれがスレッド同期の問題だと思います。 適切なweb.py生まれのスレッドにフィードバックを正しく送るために、シリアルポートへの書き込み/読み取りアクセスをpyserialと同期させる最も良い方法はありますか?次のような解決策は正しいと考えられるでしょうか?Python Webアプリケーション同期シリアルアクセス

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

Webアプリケーションが同じpythonインスタンス(web.py dev webサーバーに統合されて実行されている)で実行されている場合は、ソリューションはOKと思われます。

しかし、複数のPythonプロセスで実行する場合は、ファイル自体にロックを入れなければなりません。fcntlモジュールを使用します。

+0

素早くお返事いただきありがとうございます。はい、同じpyhonインスタンスの下で実行されています。 – Jacoscaz

関連する問題