[PyQt] Access to QSharedMemory with buffer protocol

Hans-Peter Jansen hpj at urpla.net
Mon Nov 1 23:05:38 GMT 2010


Hi Yao,

On Monday 01 November 2010, 23:38:29 Yao Ko wrote:
> Hi,
>
> I encountered the same problem back when Alexandre asked the same
> question.  This is the workaround that I've been using:
>
> CLIB = ctypes.cdll.LoadLibrary(ctypes.util.find_library('c'))
>
> shared_memory.lock()
> try:
>   CLIB.memcpy(int(shared_memory.data()), data_bytes, data_len)
> finally:
>   shared_memory.unlock()
>
> It works on both Mac and Windows.

That's a cool solution,

..if only it wouldn't be _that_ ugly. 

I really hope, that Phil comes up with something more tastefully.

Thanks anyway,
Pete

> Thanks,
> Yao
>
> On Mon, Nov 1, 2010 at 3:00 PM, Hans-Peter Jansen <hpj at urpla.net> 
wrote:
> > Hi Phil,
> >
> > end of July last year, Alexandre Raczynski asked about accessing
> > QSharedMemory, and you replied, that:
> >
> > mutable_data = buffer(sharedMemory.data())
> >
> > ...should give _write_ access to the memory.
> >
> > Hmm, not here:
> >
> > $ python
> > Python 2.6 (r26:66714, Mar 30 2010, 00:30:21)
> > [GCC 4.3.2 [gcc-4_3-branch revision 141291]] on linux2
> > Type "help", "copyright", "credits" or "license" for more
> > information.
> >
> >>>> from PyQt4 import QtCore
> >>>>
> >>>> shmem = QtCore.QSharedMemory("xxx")
> >>>> shmem.create(10)
> >
> > True
> >
> >>>> shmem.lock()
> >
> > True
> >
> >>>> b = buffer(shmem.data())
> >>>> repr(b)
> >
> > '<read-only buffer for 0xb74a37a0, size -1, offset 0 at
> > 0xb6c0f9a0>'
> >
> >>>> b = buffer(shmem.data(), 0, 10)
> >>>> repr(b)
> >
> > '<read-only buffer for 0xb74a3710, size 10, offset 0 at
> > 0xb6c0f9c0>'
> >
> >
> > Both attempts to create a buffer object resulted in read-only
> > buffers, that refuse getting modified. I must be doing something
> > wrong, but there's not much room left for manoeuvring..
> >
> > Pete
> >
> > python: 2.6
> > sip: 4.12-snapshot-12acbffd0085
> > qt4: 4.7.0
> > pyqt4: 4.8.1
> > _______________________________________________
> > PyQt mailing list    PyQt at riverbankcomputing.com
> > http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt




More information about the PyQt mailing list