1

ある時点で、私のアプリケーションは 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 を直接印刷すると、すべて正常に動作し、フリーズも何も発生しません。

必要な追加情報があれば追加します。読んでくれてありがとう。

4

0 に答える 0