oracle双机python连接_在同时执行的Celery任务之间共享Oracle数据库连接

作者在使用Python 2.7、Celery和cx_Oracle访问Oracle数据库时遇到并发查询的问题。当多个任务同时运行时,会出现数据库错误。作者怀疑这与共享数据库连接有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在使用Python2.7、celeri和cx_Oracle来访问Oracle数据库。在

我创造了很多任务。每个任务都会通过cx Oracle运行一个查询。其中许多任务将同时运行。所有连接任务应该共享相同的数据库任务。在

如果我只启动一个任务,查询就会正确运行。但是,如果我启动多个查询,就会收到以下错误消息:[2016-04-04 17:12:43,846: ERROR/MainProcess] Task tasks.run_query[574a6e7f-f58e-4b74-bc84-af4555af97d6] raised unexpected: DatabaseError('',)

Traceback (most recent call last):

File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 240, in trace_task

R = retval = fun(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 438, in __protected_call__

return self.run(*args, **kwargs)

File "/home/ric/workspace/dbw_celery/tasks.py", line 39, in run_query

column_names = get_column_names(oracle_conn, table_info["table_name"])

File "/home/ric/workspace/dbw_celery/utilities.py", line 87, in get_column_names

cursor.execute(query_str)

DatabaseError:

现在让我们看看我的代码。在

这是我的tasks.py文件,我在其中创建Oracle数据库连接,Celery实例,并定义我的任务,用户将说数据库连接:

^{pr2}$

这是我如何连接到utilities.py文件中的数据库:# utilities.py

def connect_to_db(db_user, db_password, db_host, db_port, db_name):

"""Connect to DB."""

connection_str = "%s/%s@%s:%s/%s" % (db_user, db_password, db_host, db_port, db_name)

try:

db_connection = cx_Oracle.connect(connection_str)

except cx_Oracle.DatabaseError:

logger.error("Couldn't connect to DB %s" % db_name)

return None

logging.info("Succesfully connected to the DB: %s" % db_name)

return db_connection

这是在另一个文件中定义的get_new_rows_function,查询在其中实际运行:#utilities.py

def get_new_rows(db_connection, table_info):

"""Return new rows inserted in a given table since last check."""

cursor = db_connection.cursor()

query_str = "SELECT * FROM {0}".format(table_info["table_name"])

cursor.execute(query_str)

new_rows = cursor.fetchall()

cursor.close()

return new_rows

我这样运行我的代码:celery -A tasks worker -B

为了使代码更易于理解,我尝试简化代码。在

我担心我得到的错误是由同时运行的不同任务和共享同一数据库连接引起的。他们同时执行死刑会被“搞混”之类的。在

在不同的芹菜任务之间共享数据库连接的正确方法是什么?在

有人知道我做错了什么吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值