2016-07-27 9 views
0

ここで私のフロントエンドHTMLのボタンを押してバックエンド(Python 2.7 FLASK)と対話しようとしています。 (ユーザのアクションを待っている)ライブラリイベントレットを持つPythonでFLASK socketIOを使用すると奇妙な動作が発生する

私のステートマシンが待機状態にある

startEvent.wait()

私はボタンSTARTを押すと、私は私の背中にイベントを設定します。ここでは

私は期待して行動その後、私はこの

ようsocketIOと私のhtmlページにメッセージを送る

@GUI.route('/ptu1', methods=['GET', 'POST']) 
def startButton(): 
    if request.method == 'POST': 
     startEvent.set() 
     return redirect(url_for('index')) 

を終了

socket_gui.emit('socket_field', 
        {'data': msg, 'count': self.count,'flag': 1}, 
        namespace='/test') 

このメッセージが表示されたJavaScriptコードは次のようになります。今のところ

socket.on('socket_field', function(msg) { 

      $('#Status').text(msg.data); 

      if (msg.flag == '1'){ 

       //do things 
      } 
      if (msg.flag == '2'){ 

       //do others things 
      } 

     }); 

、私は私のスタートボタンを押したときに、それは私の先端にソケットを送って、イベントを送信しているため、このコードが動作するJavaScriptそれは私が望む行動をします。

その後、私は(第2のボタンをプッシュするユーザーを待っている)ウェイトモードに入る

printEvent.wait() 
socket_gui.emit('socket_field', 
        {'data': msg, 'count': self.count,'flag': 2}, 
        namespace='/test') 

私はボタンをクリックしたときに、イベントを設定します。

@GUI.route('/print1', methods=['GET', 'POST']) 
def printButton(): 
    if request.method == 'POST': 
     printEvent.set() 
     return redirect(url_for('index')) 

を、ここで問題です:開始ボタンの最初のステップは完全に動作し、ソケットは放射され、javascriptはそれを受け取り、私が望むようにそれを扱います。

しかし、私は印刷ボタンを押すと、良い引数でソケットが正しく放射されているのをログで見ることができますが、フロントエンドのjavascriptは受信しません。

waitイベントがemitソケットをブロックしているようです。

実際、待機する前にソケットでメッセージを送信しようとしましたが、動作しています。

私が使用しているライブラリに問題があると思います:evenlet geventライブラリを試してみましたが、それはうまくいきましたが、それほど速くはありません。 イベントレットライブラリを使用したいのですが、問題を解決する方法がわかりません。

実際には、Pythonで時間ライブラリから睡眠は私のソケットthrought GUI阻止した

答えて

0

さてさて、私は解決策を見つけました。この問題を解決するために、私は以下のようにeventletライブラリのsleep関数を使用しなければなりませんでした:

import sleep from eventlet 
関連する問題