2017-02-15 21 views
1

, поэтому я пытаюсь запланировать задачи в моем приложении для флеш, чтобы стрелять время от времени ... это отлично работает с сервером разработки флагов, но, как только я запускаю одно и то же приложение с помощью пушки, он не работает должным образом , никаких ошибок, но ни одна задача не увольняют ..с использованием flask_apscheduler с 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__' Этот код только получает удар, когда вы звоните, что питон файл непосредственно (питон myapp.py)

Когда вы запустили его с Gunicorn, то __name__ больше не был основным, это было «myapp.py», поэтому он так и не добрался до той части кода, которая создала и добавила планировщика :)

+0

(Построение стрельбы env для тестирования) – Kelvin

+0

wops, editing func. должен быть 'myapp', не работает –

+0

Ухаживать за регистрацией? так что на самом деле работа срабатывала без использования журнала, но не выводила на консоль? –