2017-02-15 13 views
1

でflask_apschedulerを使用して私が今して火に私のフラスコアプリ内でタスクをスケジュールしようとしています...これは、フラスコの開発サーバとの素晴らしい作品、しかし、私はgunicornと同じアプリを起動後、意図した通りに動作しません、エラーが、ないタスクが..解雇しないされている gunicorn

from flask import Flask 
from flask_apscheduler import APScheduler 


class Config(object): 
    JOBS = [ 
     { 
      'id': 'job1', 
      'func': 'myapp:job1', 
      'args': (1, 2), 
      'trigger': 'interval', 
      'seconds': 5 
      } 
    ] 

    SCHEDULER_API_ENABLED = True 


def job1(a, b): 
    print(str(a) + ' ' + str(b)) 

app = Flask(__name__) 

if __name__ == '__main__': 
    app.config.from_object(Config()) 

    scheduler = APScheduler() 
    scheduler.init_app(app) 
    scheduler.start() 

    app.run() 

はので、私は、このサンプルを含めるために、 python myapp.py正常に動作して印刷 1 2すべての第五秒は、しかし、 gunicorn -w 1 -b 0.0.0.0:5000 myapp:appを実行すると 1 2すべての第五秒の印刷されていません、どうしてこれなの?

答えて

2

2つの物事

1)ログを使用するので、あなたはより多くの情報を得る:

2) あなたif __name__=='__main__':ブロックの外側に宣言する必要があります:

1 from flask import Flask 
    2 from flask_apscheduler import APScheduler 
    3 import logging 
    4 
    5 logging.basicConfig(level=logging.DEBUG, 
    6      format='%(asctime)s %(levelname)s %(message)s') 
    7 
    8 logger = logging.getLogger(__name__) 
    9 
10 class Config(object): 
11  JOBS = [ 
12   { 
13    'id': 'job1', 
14    'func': 'scratch:job1', 
15    'args': (1, 2), 
16    'trigger': 'interval', 
17    'seconds': 5 
18    } 
19  ] 
20 
21  SCHEDULER_API_ENABLED = True 
22 
23 
24 def job1(a, b): 
25  logger.info(str(a) + ' ' + str(b)) 
26 
27 app = Flask(__name__) 
28 app.config.from_object(Config()) 
29 
30 scheduler = APScheduler() 
31 scheduler.init_app(app) 
32 scheduler.start() 
33 
34 
35 if __name__ == '__main__': 
36   app.run() 
~ 
~ 

出力:

[2017-02-15 14:29:39 +0000] [25122] [INFO] Booting worker with pid: 25122 
2017-02-15 14:29:39,817 INFO Adding job tentatively -- it will be properly scheduled when the scheduler starts 
2017-02-15 14:29:39,819 INFO Added job "job1" to job store "default" 
2017-02-15 14:29:39,819 INFO Scheduler started 
2017-02-15 14:29:39,820 DEBUG Looking for jobs to run 
2017-02-15 14:29:39,820 DEBUG Next wakeup is due at 2017-02-15 14:29:44.816072-05:00 (in 4.995362 seconds) 
2017-02-15 14:29:44,816 DEBUG Looking for jobs to run 
2017-02-15 14:29:44,817 INFO Running job "job1 (trigger: interval[0:00:05], next run at: 2017-02-15 14:29:44 EST)" (scheduled at 2017-02-15 14:29:44.816072-05:00) 
2017-02-15 14:29:44,817 INFO 1 2 

問題:

ジョブは元々起動しませんでした。問題は、あなたのスケジューラの定義は(あなたのブロックif __name__ == '__main__'あなたが直接そのPythonのファイル(Pythonのmyapp.py)

あなたはGunicornでそれを立ち上げ呼び出したときにのみヒットを取得します。このコードは、__name__はもはやメインだったの中にあったということでしたそれは、スケジューラ:)

+0

FUNCを編集し、 – Kelvin

+0

wopsを(テストにgunicornのENVの構築)を作成して、コメントを追加したコードの一部にやったことがなかったので、それが「myapp.py」でした。 'myapp'でなければなりません。 –

+0

ロギングについて詳しく教えてください。実際にはログを使わずにジョブが起動しましたが、コンソールには出力されませんでしたか? –