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

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

解决方案:

如何创建一个连接池(或会话池,我不知道这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()

阅读更多关于 连接池.

给TA打赏
共{{data.count}}人
人已打赏
解决方案

NPM - 安装子依赖会不会增加软件包捆绑包的大小?

2022-4-21 12:09:16

解决方案

C# - 如何使用MySqlAdapter对SQL查询进行参数化。

2022-4-21 13:08:43

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索