2
我有一個程序,父進程有一個數據庫連接,並且每個子進程都有自己的數據庫連接(在構造函數中創建),使用python 2.6和psycopg2。多線程psycopg2和python不返回結果
父進程每5秒鐘查詢一次數據庫以獲取子進程的進度報告。每個子進程都執行X事物並存儲數據庫中的步驟。
我已經把代碼的簡化版本,下面
def getStatus(conn):
query = "select job_name, status from job_status_table"
cursor = conn.getCursor()
cursor.execute(query)
return cursor.fetchAll()
def simpleStatus():
conn = DBInit()
# output is correct here
print getStatus(conn)
queue = getJobList(conn)
for q in queue:
p = multiprocessing.Process(target=run, args=q)
p.start()
while: # condition that does terminate, not germane
time.sleep(5)
# output is incorrect here
print getStatus(conn)
...
裏面的子進程,它調用以下幾點:數據庫(PSQL)的
def updateStatus(self, status_i):
update = "update job_status_table set status='%s' where job_name='%s'"%(status_i, self.name)
cursor = self.conn.getCursor()
cursor.execute(update)
self.conn.commit()
外部查詢顯示,查詢在程序中運行時返回正確的結果。但是,在程序中並不是。如果我改變程序以在time.sleep調用之後重新初始化數據庫,它會給出正確的輸出。爲什麼?
非常感謝!你救了我的命。 – alasarr
我認爲conn.autocommit = True是這裏最好的答案。 – chespinoza