[PyQt] Avoiding freeze of the application
geert.discussions at gmail.com
Sat Feb 7 15:53:27 GMT 2009
I want to achieve the following:
* My (Windows) application is trying to make a connection with a Linux
server, using another application (plink, part of the Putty distro)
* Since an external application is to be called, I'm using the method
subprocess in this way:
retcode = subprocess.call( "plink -batch %s@%s echo" %
* However, that call can take up to 10 seconds (worst case). In the
mean time, my main application is "frozen", I can't do anything else.
Now, what I would like to do, is to decouple the above call from the
main thread, such that the main application becomes "free" again. I
also would like to start a one shot timer (using QTimer.singleShot()) to
create a time-out. This is to prevent a "hang" of the application, in
case something goes wrong during the subprocess call.
So, my intention is to check when the one shot timer elapses, if the
subprocess call is still busy. If not, then all is fine and I simply
ignore the time out. If the subprocess is still busy, I would like to
be able to (if needed, forcefully) stop the subprocess call.
I currently started the one shot timer just before I launched the
subprocess call, but I see that the one shot timer is also blocked by
the subprocess call. So, that doesn't do what I in fact want to do.
1. How can I "decouple" the subprocess call?
2. How can I forcefully stop a subprocess call (that should be the case
if my one shot timer elapses after 10 seconds, and the subprocess call
is not returned yet)?
3. What's the best approach to achieve the above requirements? Using a
kind of a state machine, where I first start the subprocess call
(decoupled), then start the one shot timer, change the state and then
check in that state if the subprocess call has indeed ended? And if
not, forcefully stop the subprocess call?
Any practical helpful tips much appreciated!
*Use EcoCho <http://www.ecocho.com>: environmentally friendly search the
More information about the PyQt