[zeromq-dev] czmq python binding Zpoller

Arnaud Loonstra arnaud at sphaero.org
Tue Nov 10 15:35:34 CET 2015


On 2015-11-05 12:20, Arnaud Loonstra wrote:
> On 2015-11-05 02:50, Johan Philips wrote:
>> How can I get the actual socket out of it, because Zpoller seems to
>> return a c_void_p which I cannot compare to my Zsock object I added
>> to
>> the poller.
>>
>> Minimal example using zyre nodes:
>> Python 2.7.9 (default, Apr  2 2015, 15:33:21)
>> [GCC 4.9.2] on linux2
>> Type "help", "copyright", "credits" or "license" for more
>> information.
>>  >>> from zyre import Zyre
>>  >>> from czmq import Zsock, Zpoller
>>  >>> n1 = Zyre("n1")
>>  >>> n2 = Zyre("n2")
>>  >>> n1.start()
>> 0
>>  >>> n2.start()
>> 0
>>  >>> poller = Zpoller(n1.socket(),n2.socket(), None)
>>  >>> sock = poller.wait(100)
>>  >>> print sock
>> c_void_p(27301232)
>>  >>> print n1.socket(), n2.socket()
>> <czmq.Zsock object at 0x7fbd0968cfd0> <czmq.Zsock object at
>> 0x7fbd0968cfd0>
>>  >>>
>>
>> Do I need to add cast or POINTER or is there a more convenient way?
>> Zsock(result, True) does not work since it will create a new object.
>>
>> Thanks!
>>
>> Johan
>
> I haven't found the best approach yet. First of all you can use
> ZyreEvents. See the test.py file for an example.
> I've used the zyre binding with PyZMQ. I had to wrap the binding to
> cast the pointer to a PyZMQ socket object. I don't have the code here 
> so
> can't provide how it is done. I might have posted it on this ML 
> though.
>
> I haven't used CZMQ for this.... yet. I'd need to look into this.
>
> Perhaps some else knows a better way because indeed it is essential.

I don't know if it helps but this what I've used to acquire a pyZMQ 
socket object from the python bindings.

For example when creating a Zyre instance you can get the socket like 
this:

> z1 = Zyre(b't1')
> s = z1.socket()

However that will be a <czmq.Zsock object at 0x7f61db9ce588>

You can then use the resolve method to acquire a pointer to the socket. 
This pointer can be fed to the pyZMQ Socket constructor to turn into a 
pyZMQ Socket object:

> zs = zmq.Socket(shadow=s.resolve().value)

I can use this socket with a zmq.Poller

Rg,

Arnaud



More information about the zeromq-dev mailing list