У меня есть приложение фляги с peewee и объединенной базой данных postgresql.
Все работает с настройкой приложения, пока я не добавил задание APScheduler. Я хочу, чтобы работа запускалась при запуске приложения и каждые 8 часов после.
конфигурационные биты для фляги-апшедулера и peewee:
class Config(object):
JOBS = [
{
'id': 'myjob',
'func': 'app.jobs:do_something_job',
'trigger': 'interval',
'hours': 8
}
]
SCHEDULER_API_ENABLED = True
DATABASE = 'postgresext+pool://user:password@localhost:5432/dev?max_connections=32&stale_timeout=300'
app.py:
scheduler = APScheduler()
db = FlaskDB()
def create_app(config_object=Config):
"""Application Factory Pattern"""
app = Flask(__name__.split('.')[0])
app.config.from_object(config_object)
db.init_app(app)
scheduler.init_app(app)
scheduler.start()
# RUN the job on application creation:
scheduler.run_job('myjob') # <--- exception thrown here
return app
app = create_app(Config)
строка scheduler.run_job('myjob')
приводит к peewee.OperationalError: Connection already opened.
сразу после запуска приложения (если я захожу на страницу вскоре после запуска приложения)
Хотя, похоже, что первоначальный запуск задания все еще работает нормально
do_something_job выглядит примерно так:
def do_something_job():
new = NewModel(seed=new_seed())
new.save()
old_list = NewModel.select()
for old in old_list:
if old.id != new.id:
expired = OldModel(seed=old.seed,
created_at=old.created_at,
expired_at=datetime.datetime.utcnow())
expired.save()
old.delete_instance()
Я просто не совсем уверен, чего мне не хватает, я немного новичок, когда дело доходит до пиви / колбы.
Спасибо!