Я использую модуль cx Oracle
и schedule
в Python. Ниже приведен псевдокод.
import schedule,cx_Oracle
def db_operation(query):
'''
Some DB operations like
1. Get connection
2. Execute query
3. commit result (in case of DML operations)
'''
schedule.every().hour.at(":10").do(db_operation,query='some_query_1') # Runs at 10th minute in every hour
schedule.every().day.at("13:10").do(db_operation,query='some_query_2') # Runs at 1:10 p.m every day
Оба вышеупомянутых scheduled jobs calls the same function
(которые выполняют некоторые операции с БД) и совпадут в 13:10.
Вопросов:
priority of first job over second
, как это сделать?only one of these should be accessing the database
, иначе это может привести к несогласованности данных. Как позаботиться об этом сценарии? Например, можно ли поставить какую-то блокировку при доступе к функции или таблица должна быть как-то заблокирована?да мне нужно сделать только из клиентского приложения
Я взглянул на код расписания и пришел к следующим выводам:
some_query_1
будет выполнен до some_query_2
.Хорошо, предположим, что вставка в БД занимает, например, 1 минуту, затем сначала управление переходит к запросу_1, а затем, даже если запрос_2 имеет такое же время, он не будет выполнен, пока запрос_1 не завершится?
Это верно. Вы можете протестировать поведение, запланировав 2 функции в тестовой задаче, которые используют длительный сон.
Вам действительно нужно делать это из клиентского приложения? Можете ли вы просто сделать это в БД с помощью Oracle Scheduler?