On Tue, 10 Mar 2009 11:40:48 -1000, McKay Davis <mckay....@gmail.com> wrote: > On Tue, Mar 10, 2009 at 11:08 AM, Phil Thompson > <p...@riverbankcomputing.com> wrote: >> On Tue, 10 Mar 2009 10:30:04 -1000, McKay Davis <mckay....@gmail.com> >> 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(). > > So its not possible to run PyQt with multiple python interpreters? > > This is too bad, because we require the ability to allow users to > script our application using Python. But, we would also like to > internally use PyQt for GUI development. If we only have one > interpreter then we cannot use PyQt because we cannot allow end-users > the ability to potentially develop PyQt under the commercial license.
I'm not sure how using multiple interpreters would help anyway. > Is there a way to allow only our program to access PyQt and end-users > access to the python interpreter too? Obviously you need some decoupling - but what (separate processes or just filtering the Python the user is typing) depends on your application and the scripting the user wants to do. Or let them script with JavaScript instead. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt