2016-11-16 11 views
1

return render_template(page)を実行した後、フラスコのアプリケーションで、他のタスクのcheckJob関数を実行する必要があります(ジョブの状態と電子メールを確認してください)。ユーザーに確認ページが表示されますが、まだジョブの状態を確認するために実行中のバックグラウンドジョブがあります。returnの後に他のタスクを実行するフラスコrender_template

バックグラウンドジョブでセロリhttps://blog.miguelgrinberg.com/post/using-celery-with-flaskを使用しようとしましたが動作しません。 return render_template(page)以降のものは実行されていません。

ここでは、コードの断片です:

@app.route("/myprocess", methods=['POST']) 
def myprocess(): 
    //.... do work 
    #r = checkJob() 
    return render_template('confirm.html') 
    r = checkJob() 

@celery.task() 
def checkJob(): 
    bb=1 
    while bb == 1: 
     print "checkJob" 
     time.sleep(10) 
+0

'return'は(すべての)関数を終了するため、' return'の後には何も実行できません。それは関数を即座に残します。 'checkJob.delay()'を使って 'return'の前にやる必要があります。 – furas

+0

Thanks @furas。私はreturn文の前にcheckJob.delay()を置こうとしましたが、問題はconfirm.htmlが表示されず、checkJobが終了するのを待っています。 confirm.htmlをすぐに表示してからcheckJobタスクを実行する方法はありますか?本当にありがとう!! –

+0

私が見てきたように、あなたはセロリを使用しようとしていません。 –

答えて

1

はコメントで示唆したように、あなたがapply_async()を使用する必要があります。

@app.route("/myprocess", methods=['POST']) 
def myprocess(): 
    #.... do work 
    r = checkJob.apply_async() 
    return render_template('confirm.html') 

exampleと同じように、あなたがcheckJob()を呼び出すのではなくcheckJobのようにそれを維持したくない、ということに注意してください。

+0

私はそれをしようとしましたが、checkJobで何も実行しません。 @ celery.task()の例ではありません。@ celery.task()ではなく、これも試してみましたが、[email protected]()を実行していません。 def checkJob(): bb = 1 bb == 1: print "checkJob" time.sleep(10) –

関連する問題