[PyQt] Are QThreads compatible with python's threading.RLock?
Darren Dale
dsdale24 at gmail.com
Sun Jul 27 13:55:02 BST 2008
On Saturday 26 July 2008 03:48:53 you wrote:
> On Fri, 25 Jul 2008 17:41:22 -0400, Darren Dale <dsdale24 at gmail.com> wrote:
> > I use a library that provides rudimentary thread safety of its objects
>
> and
>
> > file
> > I/O using threading.RLock from the python standard library. Could anyone
> > tell
> > me if PyQt4's QThreads are compatible with these recursive locks?
>
> Other than the fact that they will both be implemented using the same OS
> primitives, Python's and Qt's threading know nothing about each other.
Thanks Phil. The author of this other library I use added a mechanism to
accommodate alternative threading libraries: users can provide their own lock
object, provided it is reentrant and respect python's context manager
protocol. So I think I can can do this:
class MyRLock(QtCore.QMutex):
def __init__(self):
super(MyRLock, self).__init__(QtCore.QMutex.Recursive)
def __enter__(self):
return self.lock()
def __exit__(self, type, value, traceback):
self.unlock()
def acquire(self):
return self.lock()
def release(self):
self.unlock()
h5.config.RLock = MyRLock
One last question, concerning context managers: I think the current PyQt4 way
is:
def foo(self):
with QMutexLocker(self.mutex):
[...]
but if QMutex and friends had __enter__ and __exit__ methods, like MyRLock, we
could do:
def foo(self):
with self.mutex:
[...]
Is there a reason (performance?) for using Qt's QMutexLocker to provide the
context manager, rather than the QMutex itself?
Thanks,
Darren
More information about the PyQt
mailing list