https://github.com/mit-gfx/diff_stokes_flow
Tip revision: 55eb7c0f3a9d58a50c1a09c2231177b81e0da84e authored by Tao Du on 11 December 2020, 03:55:44 UTC
Create LICENSE
Create LICENSE
Tip revision: 55eb7c0
parallel.py
from multiprocessing import Process, Queue
# Input arguments: tasks = [(func, args)].
def parallel_work(tasks, num_workers):
task_queue = Queue()
done_queue = Queue()
num_workers = min(num_workers, len(tasks))
for func, args in tasks:
task_queue.put((func, args))
def worker(input, output):
for func, args in iter(input.get, 'stop'):
result = func(*args)
output.put((args, result))
for _ in range(num_workers):
Process(target=worker, args=(task_queue, done_queue)).start()
for _ in tasks:
_, _ = done_queue.get()
for _ in range(num_workers):
task_queue.put('stop')