[Python-Dev] Re: Python multiplexing is too hard (was: Network
statistics program)
Ka-Ping Yee
ping@lfw.org
Mon, 22 May 2000 09:23:23 -0700 (PDT)
On Mon, 22 May 2000, Cameron Laird wrote:
> I've got a whole list of "higher-level
> abstractions around OS stuff" that I've been
> collecting. Maybe I'll make it fit for
> others to see once we're through this affair
Absolutely! I've thought about this too. A nice "child process
management" module would be very convenient to have -- i've done
such stuff before -- though i don't know enough about Windows
semantics to make one that works on multiple platforms. Some
sort of (hypothetical)
delegate.spawn(function) - return a child object or id
delegate.kill(id) - kill child
etc. could possibly free us from some of the system dependencies
of fork, signal, etc.
I currently have a module called "delegate" which can run a
function in a child process for you. It uses pickle() to send
the return value of the function back to the parent (via an
unnamed pipe). Again, Unix-specific -- but it would be very
cool if we could provide this functionality in a module. My
module provides just two things, but it's already very useful:
delegate.timeout(function, timeout) - run the 'function' in
a child process; if the function doesn't finish in
'timeout' seconds, kill it and raise an exception;
otherwise, return the return value of the function
delegate.parallelize(function, [work, work, work...]) -
fork off many children (you can specify how many if
you want) and set each one to work calling the 'function'
with one of the 'work' items, queueing up work for
each of the children until all the work gets done.
Return the results in a dictionary mapping each 'work'
item to its result.
-- ?!ng