[Python-ideas] Decorators for running a function in a Process or Thread

NoxDaFox noxdafox at gmail.com
Mon May 1 07:13:00 EDT 2017


The decorators would abstract the logic of spawning a process or thread and
maintaining its lifecycle.

I think it could be a good fit for the `concurrent.futures` module.
Decorated functions would return a `Future` object and run the logic in a
separate thread or process.


@concurrent.futures.thread
def function(arg, kwarg=0):
    return arg + kwarg

future = function(1, kwarg=2)
future.result()


The Process decorator in particular would support use cases such as running
unstable code within an application taking advantage of process separation
benefits.
I often found myself relying on external APIs which would either crash or
run indefinitely affecting my application stability and performance.


@concurrent.futures.process(timeout=60):
def unstable_function(arg, kwarg=0):
    # hang or segfault  here
    return arg + kwarg

future = unstable_function(1, kwarg=2)
try:
    future.result()
except TimeoutError as error:
    print("Function took more than %d seconds" % error.args[1])
except ProcessExpired as error:
    print("Process exit code %d" % error.exitcode)

In case of timeout, the process would be terminated reclaiming back its
resources.


Few years ago I wrote a library for this purpose which turned out pretty
handy in reducing the boilerplate code when dealing with threads and
processes. It could be a starting point for discussing about the
implementation.
https://pypi.python.org/pypi/Pebble
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170501/e938094a/attachment.html>


More information about the Python-ideas mailing list