如何在python多进程代码中使用cx_Oracle创建一个连接(或会话)池来连接Oracle数据库?

问题描述 投票:1回答:1

我有一个很长的 multiprocessing python code 其中涉及到与 Oracle database 在运行过程中多次。这段代码应该是一个独立的应用程序,它将24*7运行,并从db中获取数据,使用多处理执行,将结果写回db,然后再次轮询数据库以获取新的数据,并不断重复这个循环。 connection pool (or session pool我不知道这两者之间的区别,新的python和编码),以提高代码的性能?需要连接到Oracle数据库使用 cx_oracle.任何帮助将被感激。非常感谢!!

python oracle connection-pooling cx-oracle
1个回答
1
投票

如何创建一个连接池(或会话池,我不知道这2个池子的区别,python和编码方面的新手)来提高代码的性能?

每个连接池中的 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()

阅读更多关于 连接池.

© www.soinside.com 2019 - 2024. All rights reserved.