我在python一个多线程应用程序,其中I创建多个生产者线程和它们提取DB的数据。 数据被以块的形式提取。 那么,一个线程与极限值创建SQL语句中的部分保持锁内。 并让线程同时执行查询,查询()函数保持在锁之外。 那么结果取部分再次保持下锁。 下面的代码片段:
with UserAgent.lock:
sqlGeoTarget = "call sp_ax_ari_select_user_agent_list('0'," + str(self.chunkStart) + "," + str(self.chunkSize) + ",1);"
self.chunkStart += self.chunkSize
self.dbObj.query(sqlGeoTarget)
print "query executed. Processing data now..."+sqlGeoTarget
with UserAgent.lock:
result = self.dbObj.fetchAll()
self.dbObj.dbCursor.close()
但是这个代码生成致命错误segmentation fault (core dumped)
。 因为如果我把所有的代码下锁,它执行罚款。 我明确地关闭游标获取数据后,它被查询时()函数再次发射重新开放。
此代码是一个名为类里面UserAgent
,它是一类名为共享资源的Producer
。 因此,数据库对象是共享的。 所以,问题区域99%必须是作为db对象是共享的同时击中查询和关闭光标然后必须用结果集被搞乱。 但后来如何解决这个问题,实现并行数据库查询执行?