website/content/blog/pyfutures.md
2020-04-11 22:10:08 -04:00

1.2 KiB

title date draft tags
Quick Python: Concurrent Futures 2020-04-11T20:40:28-04:00 false
python
concurrency

Another way to perform concurrency in python is to use the concurrent.futures module.

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
def add(x, y):
    return x + y
with ThreadPoolExecutor(max_workers=4) as executor:
    future = executor.submit(add, 1, 2)
    result = future.result(timeout=30) # unit: seconds

If max_workers=None then it will default to the number of processors on the machine multiplied by 5.

If timeout=None then there is no time limit applied.

You can also apply a function to a list or iterables

def double(x):
    return 2 * x
with ThreadPoolExecutor() as executor:
    future = executor.map(function_handle, [1, 2, 3])
    result = future.result()

Instead of threads, it is also possible to spawn processes to side-step the global interpreter lock. The documentation warns that only picklable objects can be executed and returned though.

def add(x, y):
    return x + y
with ProcessPoolExecutor() as executor:
    future = executor.submit(add, 1, 2)
    result = future.result()