2016-04-14 14 views
1

私はターミナルで現在動作しているハノイの塔に関する簡単なゲームを持っています。それは、プレイヤーが自分のターンを端末に入力することを可能にし、視覚化を端末に出力する。メインアプリケーションと並行してFlaskサーバーを実行する

私の仕事は、JSスクリプトがゲームに関する情報をサーバーにポーリングし、端末からWebページへの視覚化を倍増させるhtmlページを開くフラスコアプリケーションを作ることです。

私の問題は、ゲームとフラスコの両方にメインループがあり、それらを連続して実行すると並列に動作しないことです。

ターミナルで実行するにはゲームが必要で、ターミナルではプレイヤーが順番に回転する必要がありますが、ゲームの状態を取得して表示するにはWebサーバーが必要です。

私の質問:これには何が必要ですか?マルチプロセッシングのスレッド?

は、私はフラスコビュー

from game import game 

@app.route('/get_updates') 
def get_updates(): 
    return flask.jsonify(game.instance().board) 

フラスコとゲームは別のスレッドで実行されている場合、それはどのように働くつもりであるとしましょうか?別のスレッドからゲームオブジェクトを取得するにはどうすればよいですか?

+0

別のスレッドを起動してFlaskサーバーを実行することはできますが、難しいことではありません。 – laike9m

+0

これをチェックしてくださいhttp://stackoverflow.com/questions/14384739/how-can-i-add-a-background-thread-to-flask –

+1

マルチスレッドは最も簡単な解決策です。変数、オブジェクトを別々のスレッド間で共有することができます。あなたはフラスコスレッドのコンストラクタのパラメータとしてゲームオブジェクトを与えます – qvpham

答えて

2

あなたのゲームを別のスレッドで実行する方が良いかもしれませんか?

import threading 
import time 
from flask import Flask, render_template 

class myGame(threading.Thread): 
    def __init__(self, threadID, name, counter): 
     threading.Thread.__init__(self) 
     self.board = 1 

    def run(self): 
     pass 


app = Flask(__name__) 
game = myGame() 

@app.route('/get_updates') 
def get_updates(): 
    return flask.jsonify(game.board) 

if __name__ == "__main__": 
    game.start() 
    app.run(port=81, host='0.0.0.0', debug=False, use_reloader=False) 
0

別のスレッドを起動してFlaskサーバーを実行してください。

関連する問題