2017-10-07 12 views
0

私はフラスコで新たに始まり、いくつかのリクエストを処理するサーバーアプリケーションを作成しています。今はPOSTリクエストの部分には時間がかかります彼が送った最初のPOSTリクエストに応答するまで、私はモバイルアプリのユーザーを待たなければなりません。フラスコはユーザーに "OK"を返し、データを処理します

たとえばモバイルアプリにOKを返して、バックグラウンドでデータを処理できる方法はありますか?

私がこれまで考えてきたことのようになります。 -

if request.method=='POST': 
    #signal another process (another python file for example) to start with parameters from the request 
    return "OK" 

しかし、私はそれがベストプラクティスであることを確認していない、任意の他のアイデア?私はダウンロードしてRedisのと一緒に窓の上にそれをインストールしたセロリをインストールするのアドバイス以下

EDIT

from flask import Flask 
from celery import Celery 

app = Flask(__name__) 
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' 
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0' 

celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL']) 
celery.conf.update(app.config) 

ExtractFeatures()機能について:Redisの構成と私のセレラため

TypeError: ExtractFeatures() takes exactly 2 arguments (1 given) 

:私は、POSTリクエストを発行しようとすると、私はブローカーワーカーセロリが実行されているが、私は次のように取得しています持っている

POSTリクエストのための
def ExtractFeatures(JsonRecieved): 
#testing for now sleep for 5 seconds to make sure code executes this 
#function parallel and finishes the request handling 
time.sleep(5) 
print("finished Extracting Features") 

@app.route('/PostPhotos',methods=['POST']) 
def api_PostPhotos(): 
if request.method=="POST": 
    ExtractFeatures.delay(request.json) 
return("finished request") 

私の期待は、「完成した要求」が「完成した抽出機能」の前に印刷されることですが、上記のエラーが表示されます。

+1

セロリのようなものが必要です。 –

+0

@DanielRosemanあなたが私を助けることができるならば私は新しい編集を追加しました –

答えて

0

ウェブアプリケーションで長時間実行されるプロセスを実装することは、一般的にはお勧めできません。

典型的な解決方法は、ある種のキュー(SQS、Celery、ファイル・オン・ディスクなど)にメッセージを書き込み、より長い操作を実行するために別々のワーカー・プロセスを実装することです。

操作が完了したときにユーザーに通知する必要がある場合は、その目的のためにメッセージにデータを提供し、結果を別のキューに書き込み、クライアントプロセスでチェックするようにできます。

+0

私は今、その正確な目的のためにセロリを使用していますが、私はまだ初心者です。私はこれまでに何を得たかで質問を編集しました。 –

関連する問題