APScheduler Jobstore Oracle удаляет «OperationalError ORA-03114» после добавления задания (add_job) - PullRequest
0 голосов
/ 04 февраля 2020

Версия библиотек: APScheduler-3.5.3 SQLAlchemy-1.3.4 cx_ Oracle -7.1.3 python -2.7.14

BackgroundScheduler запущен (с job_store) и работает успешно (Вы можно добавлять задания, хранилище заданий работает нормально, и т. д. c) Однако, если неактивно более 24 часов (новые задания не добавляются и не изменяются), возникает следующая ошибка при добавлении нового задания «OperationalError ('(cx_ Oracle .OperationalError»). ) ORA-03114: не подключен к ORACLE ',) "

Код в норме:

job_store = SQLAlchemyJobStore(url=URL_JOBSTORE, tablename = TABLE_JOBSTORE)
_job_scheduler = BackgroundScheduler()
_job_scheduler.add_jobstore(job_store)
_job_scheduler.start()
_job_scheduler.add_job(...) #OK

Ошибка кода:

job_store = SQLAlchemyJobStore(url=URL_JOBSTORE, tablename = TABLE_JOBSTORE)
_job_scheduler = BackgroundScheduler()
_job_scheduler.add_jobstore(job_store)
_job_scheduler.start()
#LONG TIME OPERATIONS 24 hours past
_job_scheduler.add_job(...) # drops OperationErrror exception

Ошибка полная:

OperationalError: (cx_ Oracle .OperationalError) ORA-03114: не подключен к ORACLE \ n [SQL: ВСТАВИТЬ INTO "jobrestore_PRE_CENTRE2_0" (id, next_run_time, job_state) VALUES (id: id: next_run_time,: job_state)] (Справочная информация об этой ошибке: http://sqlalche.me/e/e3q8) \ n '

Я думаю, что Jobstore потерял соединение. Потому что, если вы снова создадите планировщик, он будет работать правильно. Есть ли способ повторно подключить Jobstore к базе данных?

Спасибо

1 Ответ

0 голосов
/ 04 февраля 2020

Я предлагаю вам попробовать передать engine_options = {'pool_pre_ping': True} в хранилище заданий. Это должно предотвратить любые ошибки, вызванные закрытием незанятых соединений сервером базы данных.

job_store = SQLAlchemyJobStore (url = URL_JOBSTORE, имя таблицы = TABLE_JOBSTORE, engine_options = {'pool_pre_ping': True})

https://github.com/agronholm/apscheduler/issues/419

...