我有一个程序,其中父进程有一个数据库连接,每个子进程都有自己的数据库连接(在构造函数中创建),使用 python 2.6 和 psycopg2。
每 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 )
...
在子进程内部,它调用以下内容:
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()
数据库的外部查询 (psql) 表明查询在程序中运行时返回了正确的结果。但是,在程序中并非如此。如果我在 time.sleep 调用后更改程序以重新初始化数据库,它会给出正确的输出。为什么?