ある時点で、私のアプリケーションは MySQL データベースにクエリを実行し、次のコードで 300 行をフェッチします。
cur.execute('''
select
ime, brPredmeta, statusStr, sudskiBr, sudija,
datumRasprave,statusPredmeta, zaduzen,datumZaduzenja
from predmeti
order by ime
''')
for row in cur: #extract data from variables
ime, brPredmeta, statusStr, sudskiBr, sudija, datumRasprave, statusPredmeta, zaduzen, datumZaduzenja = row
print(row)
ほぼ瞬時にコンソール ウィンドウにタプルを表示します。データ抽出後、簡単な HTML を使用して PDF ページの 3 つのセクションを作成します。ヘッダー、ボディ、フッター。3 つすべてが 8 ~ 10 列の単純なテーブルです。ただし、次のように追加しているため、本文には300行あります。
#we are still in FOR LOOP that iterates rows in cursor
body = ('<html><head><title></title>'
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>'
'<style></style>'
'</head>'
'<body>'
'<table align ="center" border="0" width="100%" style="table-layout:fixed">'
'<tr height="10%">'
'<td align="left" width="20">'+str(brojac)+'.</td>'
'<td align="left" width="180">'+ime+'</td>'
'<td align="left" width="100">'+str(brPredmeta)+'</td>'
'<td align="left" width="80">'+statusStr+'</td>'
'<td align="left" width="80">'+str(sudskiBr)+'</td>'
'<td align="left" width="140">'+sudija+'</td>'
'<td align="left" width="150">'+zaduzen+'</td>'
'<td align="left">'+datumZaduzenja+'</td>'
'<td align="right"> '+statusPredmeta+' </td>'
'</tr>')
self.ui.printHTML.append(body)
このまったく同じコードは、SQLite で問題なく動作していました。今日MySQLに切り替えたので、プログラム全体がフリーズします。CPU が 100% に急増し (4 コア i3)、RAM 使用量が (起動時の 24MB から) 100MB を超えます。1分後、プロセスを終了しました。
この関数を他のパラメーター (クエリは少し異なります) と一緒に使用すると、行数が少なくなります (60 から 120 まで)。すべてがスムーズに進みます。
「印刷プレビュー」ダイアログをスキップして PDF を直接印刷すると、すべて正常に動作し、フリーズも何も発生しません。
必要な追加情報があれば追加します。読んでくれてありがとう。