[zeromq-dev] "cython inline checkrc" change in PyZMQ 13.0.0 changes handling of EINTR?

Jonathan Kamens jkamens at quantopian.com
Mon Mar 11 21:13:47 CET 2013


Greetings,

With PyZMQ versions prior to 13.0.0, we were running into problems with 
certain PyZMQ calls getting interrupted by restartable signals (e.g., 
SIGALRM) used by our application. We fixed this problem like this:

                 while True:
                     try:
                         self.context.term()
                     except zmq.ZMQError as exc:
                         if exc.errno == EINTR:
                             log.info('zmq_term interrupted by signal,
    restarting')
                         else:
                             log.exception('Error terminating ZMQ context')
                             raise
                     except BaseException as exc:
                         log.exception('Error terminating ZMQ context')
                         raise
                     else:
                         break

Note that 0MQ allows term() to be restarted when it gets EINTR 
<http://api.zeromq.org/2-1:zmq-term#toc4>.

This worked just fine, but has stopped working in PyZMQ 13.0.0. Now, 
instead of a ZMQError with errno set to EINTR, we are getting a 
KeyboardInterrupt exception. I think this commit to PyZMQ 
<https://github.com/zeromq/pyzmq/commit/3959e4515f86db11f660738df5d36f62478c39e2> 
is the cause.

Questions:

 1. Was this change in behavior intentional? If so, it probably should
    be documented in the release notes.
 2. Am I understanding correctly that what needs to be done to fix the
    problem in my app is to do "except KeyboardInterrupt" instead of
    "except zmq.ZMQError as exc" and not bother to check errno?

Thanks in advance for any help you can provide.

Regards,

Jonathan Kamens

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


More information about the zeromq-dev mailing list