2015-08-24 3 views
1

J'ai un serveur Web Flask qui interagit avec une base de données POSTGREsql pour extraire et insérer des données du site Web. J'ai également une tâche APScheduler Background Scheduler qui vérifie la base de données régulièrement, recherche certains objets avec certains attributs comme 5 minutes après la création, colonne x est plus de 10 etc, puis envoie cette information dans un e-mail. Le problème que je rencontre en ce moment est que, lorsqu'il est exécuté dans l'environnement local, une seule tâche est exécutée, et il s'exécute toutes les (30) secondes comme je le veux. Cependant, si je le déploie sur Heroku, deux des mêmes tâches sont exécutées en l'espace de quelques millisecondes l'une de l'autre, ce qui pose des problèmes.APScheduler exécutant un thread dans le serveur local, deux threads lorsqu'il est déployé à distance

Le code responsable de l'exécution de la tâche d'arrière-plan serait le suivant.

app = Flask(__name__) 
#app.debug = True 
app.debug = False 
app.config.from_pyfile('config.py') 
db = models.db 
db.init_app(app) 
migrate = Migrate(app, db) 


manager = Manager(app) 
manager.add_command('db', MigrateCommand) 
job_defaults = { 
    'coalesce': False, 
    'max_instances': 1 
} 
sched = BackgroundScheduler(job_defaults=job_defaults) 
sched.start() 


@sched.scheduled_job('interval', seconds=30) 
def my_job(): 
    with app.app_context(): 
     my_class = OutageCheck(db) 
     my_class.checkOutage() 
+0

Courez-vous sur plusieurs dynamos sur Heroku ou juste une dynamo? –

+0

@SeanVieira: Une dynamo, et les journaux montrent qu'elle provient de la même dynamo – lonewaft

+0

Et comment lancez-vous l'application sur Heroku ('app.run' ou un autre serveur WSGI)? –

Répondre