我在一个多线程python程序中使用psycopg2(2.6)连接到PostgreSQL数据库。
当程序中的队列大小增加时,select querys get error“no results to fetch”,但是将记录插入到数据库中非常有效。
示例代码:
class Decoders(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
self.decode()
def decode(self):
queue = self.queue
db = Database()
while queue.qsize() > 0:
# calling db methods, just an example
temp = queue.get()
db.select_records()
db.insert_record(temp)
以及:
Decoders(queue).start()
Decoders(queue).start()
注意:我对多处理没有这个问题。
编辑:
当我只启动一个线程时,程序没有任何问题。
数据库类:
class Database:
db = object
cursor = object
def __init__(self):
self.db = connect(host=conf_hostname,
database=conf_dbname,
user=conf_dbuser,
password=conf_dbpass,
port=conf_dbport)
self.db.autocommit = True
self.cursor = self.db.cursor()
def select_records(self):
self.cursor.execute(simple select)
return self.cursor.fetchall()
def insert_record(self, temp):
# insert query
我们可以在psql中使用单个连接创建多个游标。
请使用下面的代码
是否为每个线程创建连接?如果你有多个线程,你需要为每个线程建立一个连接(或者在连接周围有一个锁定机制的池),否则你会遇到各种奇怪的问题。
这就是为什么在多处理中不会有问题,因为每个进程都将创建自己的连接。
相关问题 更多 >
编程相关推荐