PDF中的CPU峰值在PyQt中呈现,然后冻结

时间:2012-09-04 14:15:28

标签: python mysql pdf pyqt

有一次,我的应用程序查询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创建3页PDF页面;标题,正文和页脚。所有3个都是8-10列的simpe表。然而,身体有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使用率超过100MB(启动时从24MB)。过了一会儿,我终止了这个过程。

当我将此函数与其他参数(查询有所不同)一起使用时,产生的行数较少(从60到120),一切顺利。

如果我跳过“打印预览”对话框,只是直接打印PDF,一切正常,没有冻结,没有任何东西。

我将添加您可能需要的任何其他信息。谢谢你的阅读。

0 个答案:

没有答案