STINNER Victor <victor.stin...@haypocalc.com> added the comment: subprocess._communicate_with_select() retries select.select() on EINTR: it recomputes timeout before each call.
while self._read_set or self._write_set: timeout = self._remaining_time(endtime) if timeout is not None and timeout < 0: raise TimeoutExpired(self.args, orig_timeout) try: (rlist, wlist, xlist) = \ select.select(self._read_set, self._write_set, [], timeout) except select.error as e: if e.args[0] == errno.EINTR: continue raise ... It has a similar code for select.poll(). asyncore.poll() handles EINTR: it just returns. > I think it would be better to just implement the retrying version > of select directly. It would be nice to share more code between subprocess and multiprocessing, but I don't know where such code should be moved. Create a new module just for one function is stupid. Handling EINTR is a common problem when managing subprocesses. subprocess has a _eintr_retry_call() function. multiprocessing has a @_eintr_retry decorator handling supporting more error types (use except (EnvironmentError, select.error):). ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue12338> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com