On Tue, 10 Mar 2009 10:30:04 -1000, McKay Davis <[email protected]>
wrote:
> After no response, maybe more specifics with our Multi-Threaded Python
> w/ PyQt problem would help:
> 
> In the main thread, we do:
> 
> PyEval_InitThreads(); // acquires the lock
> PyInitialize();
> // other init stuff
> PyThread_release_lock()
> 
> …and in each new Python thread we do:
> Py_NewInterpreter()
> …
> PyThreads_release_lock()
> 
> We call release()/acquire() blocks whenever the python script does a
> blocking operation.  A specific example of a lockup with PyQT is
> running examples/tutorial/t8.pyw.  We basically:
> 
> PyThreads_acquire_lock()
> <run example script>
> PyThreads_release_lock()
> 
> When a slot is invoked as a result of the slider being moved we get a
> deadlock.  This happens when sip_ProtectVirt_languageChange calls
> PyThreads_release_lock() on an already released lock.  If we don’t
> release the lock after the main thread PyQT script code runs, then the
> script runs fine – but our other python script threads will be starved
> out.
> 
> Anybody have any ideas on how to resolve this deadlock?

PyQt uses the PyGILState_* functions. These aren't supported with multiple
interpreters - see the docs for Py_NewInterpreter().

Phil
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to