[zeromq-dev] Is there a non-blocking alternative to Poller.poll() ?

Matthieu Robert matthieu.robert at irisa.fr
Tue May 4 14:39:44 CEST 2021

Hi , 

I picked up a Python project linking 3 components together using zeromq messages. 
Basically there is a Client sending and receiving message to/from an Orchestrator which also sends and receives messages to/from a Server. 

The in-between component, the orchestrator, has a zmq.Poller object to which the server and client sockets are connected. 
To read the messages received on this Poller, I am using a while loop which basically does : 

while(True) : 
events = dict(Poller.poll(1)) 
#treat events ... 

Previously the Poller.poll timeout parameter was set to 100 milliseconds but it was slowing down my program, afterwards I set the timeout to 1 millisecond and it significantly accelerated my program, but I still want to reduce its CPU usage by replacing all busy-waiting parts of my program (for example the while loop to request the Poller.poll(1)). And I don't want to use Poller.poll() without timeout because it blocks the program. I though of calling Poller.poll() in a thread in background, that would trigger the functions treating the events while my main orchestrator program was still doing its thing. 

I was wondering if there was a non-blocking way, using zeromq, to be notified when the Poller receives a new event ? Instead of using a while loop to call Poller.poll(1) multiple times. 

Thank you, 

Matthieu Robert 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20210504/bd9db702/attachment.htm>

More information about the zeromq-dev mailing list