当连接对象被不同的线程使用时,cx_Oracle 游标的行为是什么?生成器将如何影响这种行为?具体来说...
编辑:原始示例函数不正确;子函数返回了一个生成器,yield
没有直接在循环中使用。这澄清了何时finally
执行(之后return
执行),但仍然没有回答如果另一个线程开始使用创建游标的连接对象是否可以使用游标。它实际上似乎(至少在 python 2.4 中)try...finally
会yield
导致语法错误。
def Get()
conn = pool.get()
try:
cursor = conn.cursor()
cursor.execute("select * from table ...")
return IterRows(cursor)
finally:
pool.put(conn)
def IterRows(cursor):
for r in cursor:
yield r
Get()
是一个被多个线程调用的函数。连接是使用threaded=False
参数创建的。
我在想...
cursor
如果线程 2 出现并使用相同的连接对象,线程 1 的对象是否仍然可用?如果没有,可能会发生什么?
我看到的行为是 cx_Oracle 中谈论协议错误的异常,然后是段错误。