PyQt QThreadPool error
Phil Thompson
phil at riverbankcomputing.com
Fri Jan 8 06:27:38 EST 2010
On Thu, 7 Jan 2010 15:07:10 -0800 (PST), h0uk <vardan.pogosyan at gmail.com>
wrote:
...
> Phil you right about app.exec_(). But situation is sligthly different.
>
> I want to have more than one Job. I add these Jobs into QThreadPool
> trough cycle. And I also want these Jobs to run sequentially.
>
> The following code illustrate what I mean:
>
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
>
> import sys
> import os
> import time
>
> from PyQt4 import QtCore, QtGui
>
> class Job(QtCore.QRunnable):
> def __init__(self, name):
> QtCore.QRunnable.__init__(self)
> self._name = name
>
> def run(self):
> time.sleep(3)
> print self._name
>
>
> if __name__ == "__main__":
>
> app = QtGui.QApplication(sys.argv)
>
> QtCore.QThreadPool.globalInstance().setMaxThreadCount(1)
>
> for i in range(5):
> j = Job("Job-" + str(i))
> j.setAutoDelete(True)
> QtCore.QThreadPool.globalInstance().start(j, i)
> app.exec_()
>
> After 5 cycle I get the same error: An unhandled win32 exception
> occured in python.exe.
>
> How I can do it?? To run my Jobs sequentially???
It's a PyQt bug. The workaround is not to use setAutoDelete() and instead
keep an explicit reference to your Job instances - for example in a list of
jobs.
Phil
More information about the Python-list
mailing list