Le vendredi 26 février 2010, Phil Thompson a écrit : > On Fri, 26 Feb 2010 12:08:58 +0000, Phil Thompson > > <p...@riverbankcomputing.com> wrote: > > > > Unless you can provide me with a test case you'll have to experiment... > > > > Try adding... > > > > pthread_atfork(NULL, NULL, PyOS_AfterFork); > > > > ...after the call to PyEval_InitThreads() in siplib.c. > > An alternative (which I may be more comfortable with) is to add the > /HoldGIL/ annotation to all QProcess.start() overloads. However the > asynchronous nature of process starts may mean it has no effect. > > Phil
I will try the pthread_atfork() thing, which seems to me to be safer. While I recompile sip and PyQt (I was using the linux distribution compiled version), here is a test case, which holds after a while: #!/usr/bin/env python import threading from PyQt4 import QtCore def theotherthread(): print 'theotherthread' while True: a = 'turlute' def processExited(): print 'processExited' def readStdout(): global qprocess print qprocess.readAllStandardOutput() def readStderr(): global qprocess print qprocess.readAllStandardError() thread1 = threading.Thread( target=theotherthread ) thread1.start() while True: qprocess = QtCore.QProcess() qprocess.connect( qprocess, QtCore.SIGNAL( 'finished( int, QProcess::ExitStatus )' ), processExited ) qprocess.connect( qprocess, QtCore.SIGNAL( 'readyReadStandardOutput()' ), readStdout ) qprocess.connect( qprocess, QtCore.SIGNAL( 'readyReadStandardError()' ), readStderr ) qprocess.start( 'echo', [ 'totototototototo' ] ) qprocess.waitForFinished(-1) -- Denis _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt