[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