On 1/19/2009 3:13 PM, eliben wrote:
I've seen various references to this issue before, but nothing to fully
address it as I'd expect.
Can you comment on the pros and cons of using QThread vs Python's threads
I'll begin: on the surface, Python's threads make more sense because they're
Qt independent and can be ported between apps that don't necessarily depend
on Qt (for example a web version of a GUI app). The Python thread API is
powerful enough for all uses, it seems.
However, there are concerns. Perhaps QThreads are more efficient? Or maybe
more tightly integrated with the other parts of PyQt, so it's easier to use
It's mostly the same. The main difference is that QThreads are better
integrated with Qt (asynchrnous signals/slots, event loop, etc.). Also,
you can't use Qt from a Python thread (you can't for instance post event
to the main thread through QApplication.postEvent): you need a QThread
for that to work.
A general rule of thumb might be to use QThreads if you're going to
interact somehow with Qt, and use Python threads otherwise. Though I
find it difficult to imagine a thread *not* interacting with Qt at all...
BTW: remember that, with Qt, you don't need threads for many tasks that
are sometimes solved with threads (a prominent example is network
programming). So you might want to think if you really need threads in
the first place.
Are there differences with regards to the GIL (are QThreads controlled
by Python's interpreter too?)
It's the same. When Python code is in execution, the GIL is held, so the
threads are basically mutually exclusive.
PyQt mailing list PyQt@riverbankcomputing.com