我在python中使用了cx Oracle
和schedule
模块。
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
(执行一些 *DB操作 *)和将在13:10**重合。
问题:
1.那么,调度程序如何处理这种情况?* 比如同时运行2个作业 。它是否放入某种队列,即使时间相同也逐个运行?或者它们是并行的?
1.哪一个得到第一个挑选*?如果我想要priority of first job over second
,怎么做?
1.还有,* 重要的一点 * 是,在一个时间only one of these should be accessing the database
,否则可能会导致 * 不一致的数据 *。如何处理这种情况?比如在访问函数时是否可能放置某种锁,或者是否应该以某种方式锁定表?
1条答案
按热度按时间5sxhfpxr1#
我看了一下时间表的代码,我得出了以下结论:
1.排程程式库不会平行或并行运作。因此,会依序行程已到期的工作。这些工作会根据其到期日排序。最早应执行的工作会先执行。
1.如果作业同时到期,则根据FIFO方案调度执行作业,考虑到作业的创建。因此,在您的示例中,
some_query_1
将在some_query_2
之前执行。1.第三个问题实际上是不言自明的,因为一次只能执行一个功能。因此,这些功能实际上不应相互妨碍。