やあみんな、私は次の問題を抱えています: 1 つのプロセスが非常に大きなクエリを実行し、結果をファイルに書き込みます。その間に、プロセスはステータスをデータベースに更新する必要があります。
最初に考えた:問題なし、疑似コード:
db = mysqldb.connect()
cursor = db.cursor()
large = cursor.execute(SELECT * FROM VERYLARGETABLE)
for result in large.fetchall():
file.write(result)
if timetoUpdateStatus: cursor.execute(UPDATE STATUS)
問題: 900 万の結果を取得すると、「large = cursor.execute(SELECT * FROM VERYLARGETABLE)」が終了しません... mysql サーバーが 30 秒後にクエリを終了した 4 列で 200 万エントリの境界を見つけましたが、 python プロセスが何時間も実行され続けます...これはおそらく Python MySQLDB ライブラリのバグです..
SO 2 回目の試行: db.use_results() および fetch_row() を使用した db.query 関数:
db = mysqldb.connect()
cursor = db.cursor()
db.query(SELECT * FROM VERYLARGETABLE)
large = large.use_result()
while true:
for row in large.fetch_row(100000):
file.write(row)
if timetoUpdateStatus: cursor.execute(UPDATE STATUS) <-- ERROR (2014, "Commands out of sync; you can't run this command now")
そのため、3 回目の試行では 2 つの MySQL 接続を使用していました...これは機能しません。2 番目の接続を開くと、最初の接続が消えます....
助言がありますか??