gpt4 book ai didi

Python 线程 - 访问 postgreSQL 时崩溃

转载 作者:行者123 更新时间:2023-11-29 13:07:37 26 4
gpt4 key购买 nike

这是一个工作正常的简单线程程序:

import psycopg2
import threading
import time

class testit(threading.Thread):
def __init__(self, currency):
threading.Thread.__init__(self)
self.currency = currency

def run(self):
global SQLConnection
global cursor
SQLString = "Select dval from ddata where dname ='%s' and ddate = '2009-07-17'" \
%self.currency
z = time.time()
while (time.time() - z) < 2:
print SQLString

SQLConnection = psycopg2.connect(database = "db", user = "xxxx", password = "xxxx")
cursor = SQLConnection.cursor()

a = testit('EURCZK')
b = testit('EURPLN')
a.start()
b.start()

但是,一旦我尝试使用以下代码开始访问线程中的 postgresql 数据库,我总是遇到停止标志崩溃:

import psycopg2
import threading
import time

class testit(threading.Thread):
def __init__(self, currency):
threading.Thread.__init__(self)
self.currency = currency

def run(self):
global SQLConnection
global cursor
SQLString = "Select dval from ddata where dname ='%s'and ddate = '2009-07-17'" %self.currency
z = time.time()
while (time.time() - z) < 2:
cursor.execute(SQLString)
print cursor.fetchall()

SQLConnection = psycopg2.connect(database = "db", user = "xxxx", password = "xxxx")
cursor = SQLConnection.cursor()

a = testit('EURCZK')
b = testit('EURPLN')
a.start()
b.start()

两者之间的唯一区别在于 while 循环。我对线程编程还很陌生。 postgres 库(psycopg2)不是“线程安全的”吗?所有这一切都在 Windows XP 上运行。有什么我可以做的吗?

谢谢。

最佳答案

global SQLConnection
global cursor

似乎您正在从多个线程访问全局变量?你应该永远不要这样做,除非这些全局变量是线程安全的,或者你自己提供了适当的锁定。

您现在有 2 个线程访问同一个连接和同一个游标。他们会踩到彼此的脚趾。 psycopg2 连接可能是线程安全的,但游标不是。

每个线程使用一个游标(也可能是一个连接)。

关于Python 线程 - 访问 postgreSQL 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1148671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com