The multiprocessing queue uses pickle to serialize/deserialize the objects
before/after sending them between processes.

Since the proto message contains a C extension class, it can't be serialized
or deserialized with pickle. And it doesn't need to, just use the protobuf
serialization/deserialization routines.

So serialize and do Q.put(serizlied), then retrieve using Q.get() and
deserialize.


On Tue, Apr 26, 2011 at 7:37 PM, vish <vishi...@gmail.com> wrote:

> So far what I've found is python protocol buffer objects are not
> serializable using Pickle.
>
> On Apr 25, 3:55 pm, vish <vishi...@gmail.com> wrote:
> > Environment: CentOS 64bit
> > Python 2.6
> > Protocol Buffers 2.4.0.a
> > Python client with Native C++ support
> > python protocol buffers installed to ~/protobuf
> > LD_LIBRARY_PATH=~/protobuf/lib:~/protobuf/google/protobuf/src/.libs
> > PYTHONPATH=:~/protobuf/:.:~/protobuf/google/protobuf/src/.libs:~/
> > protobuf/lib
> >
> > Hi,
> >  In a multiprocessing environment, my code is trying to add decoded
> > messages to a shared Queue, and then pop them off at a later stage.
> >
> > Inserting messages in the Queue is working fine. But while fetching
> > those messages, am getting this error:
> >
> > Traceback (most recent call last):
> >   File "/usr/lib64/python2.6/multiprocessing/queues.py", line 242, in
> > _feed
> >     send(obj)
> > PicklingError: Can't pickle <type
> >
> 'google3.net.google.protobuf.python.internal._net_proto2___python.CMessage'
> >:
> > import of module
> > google3.net.google.protobuf.python.internal._net_proto2___python
> > failed
> >
> > Verified LD_LIBRARY_PATH, LD_RUN_PATH, PYTHONPATH and they all seem to
> > be valid. Anyway help in solving this problem is appreciated.
> >
> > Inserting messages to Queue:
> >
> >         while not self.stopped():
> >             el = self.rcvr.next_message()
> >             if el is not None:
> >                 print "%s is the event"%el
> >                 Q.put(el)
> >
> > Popping messages off Queue:
> >
> >     def next_message(self):
> >         """Returns next event (if available) from Queue"""
> >         return Q.get()
> >
> > where Q is multiprocessing.Queue
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to protobuf@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to