如何使用 cx_Oracle 在 python 多处理代码中创建连接(或会话)池以连接到 Oracle 数据库?

Pra*_*chi 2 python oracle cx-oracle connection-pooling

我有一个很长的时间multiprocessing python code,其中涉及Oracle database在运行期间与多次交互。该代码应该是一个独立的应用程序,它将 24*7 运行并从数据库中获取数据,使用多处理执行它,将结果写回数据库,然后再次轮询数据库以获取新数据并不断重复此循环。我如何创建一个 connection pool (or session pool(我不知道 2, new in python 和 coding )之间的区别来提高代码的性能?需要使用cx_oracle. 任何帮助将不胜感激。提前谢谢了!!

Lal*_*r B 5

我如何创建连接池(或会话池,我不知道 2, new in python 和 coding 之间的区别)来提高代码的性能?

a 中的每个连接cx_Oracle connection pool对应一个Oracle session

当应用程序频繁连接和断开数据库时,连接池将提高性能。cx_Oracle连接池允许应用程序创建和维护到数据库的连接池。池是用创建的cx_Oracle.SessionPool(),然后SessionPool.acquire()可以调用以从池中获取连接。初始池大小和最大池大小在池创建时提供。当池需要增长时,会自动创建新连接。当不再使用连接时,池可以缩小到最小大小。从池中获取的连接应使用SessionPool.release()或释放回池Connection.close()当不再需要它们时。否则,当所有引用连接的变量超出范围时,它们将自动释放回池。会话池可以使用 完全关闭SessionPool.close()

下面的示例显示了如何使用连接池连接到 Oracle 数据库:

# Create the session pool
pool = cx_Oracle.SessionPool("hr", userpwd,
        "dbhost.example.com/orclpdb1", min=2, max=5, increment=1, encoding="UTF-8")

# Acquire a connection from the pool
connection = pool.acquire()

# Use the pooled connection
cursor = connection.cursor()
for result in cursor.execute("select * from mytab"):
    print(result)

# Release the connection to the pool
pool.release(connection)

# Close the pool
pool.close()
Run Code Online (Sandbox Code Playgroud)

阅读有关连接池的更多信息。