# HG changeset patch # User paulb # Date 1127773582 0 # Node ID 5026061df1caffb1ba58787599b925917330e80e # Parent c64efeb60986c16c790e355a37b096dee5cd74ff [project @ 2005-09-26 22:26:22 by paulb] Removed the signal handler for now: interrupted system calls caused by signals seem to disrupt the communications. An os.wait method has been added to the Channel __del__ method in order to help tidy up child processes. diff -r c64efeb60986 -r 5026061df1ca parallel.py --- a/parallel.py Mon Sep 26 21:59:16 2005 +0000 +++ b/parallel.py Mon Sep 26 22:26:22 2005 +0000 @@ -72,7 +72,7 @@ import os import sys -from select import select +import select from signal import signal, SIGCHLD try: @@ -96,6 +96,16 @@ self.read_pipe = read_pipe self.write_pipe = write_pipe + def __del__(self): + + # NOTE: Hack until the signals vs. pipes behaviour is fixed. + + if self.pid != 0: + try: + os.wait() + except OSError: + pass + def send(self, obj): "Send the given object 'obj' through the channel." @@ -136,10 +146,13 @@ to be read from. """ - if timeout is not None: - t = select(self.readables.keys(), [], [], timeout) - else: - t = select(self.readables.keys(), [], []) + try: + if timeout is not None: + t = select.select(self.readables.keys(), [], [], timeout) + else: + t = select.select(self.readables.keys(), [], []) + except select.error: + return [] readable_fds, writable_fds, exceptional_fds = t readable = [self.readables[fd] for fd in readable_fds] @@ -186,9 +199,9 @@ # Define and install a handler which waits for terminated child processes. -def handler(number, frame): - os.wait() +#def handler(number, frame): +# os.wait() -signal(SIGCHLD, handler) +#signal(SIGCHLD, handler) # vim: tabstop=4 expandtab shiftwidth=4