Source code for sfepy.homogenization.multiproc

"""
Multiprocessing functions.
"""
import sys

try:
    from multiprocessing import (Manager, cpu_count,
        current_process, set_start_method)
    from concurrent.futures import ProcessPoolExecutor

    if not current_process().name.startswith('HomogeniationWorkerProcess'):
        set_start_method('spawn')
        use_multiprocessing = cpu_count() > 1
    else:
        use_multiprocessing = False
except:
    use_multiprocessing = False

active_workers = {}
multiproc_manager = Manager()
multiproc_dict = multiproc_manager.dict()

if use_multiprocessing:
    active_workers.update({
        'pool': None,
    })


[docs] def get_dict(name, clear=False): if name in multiproc_dict: out = multiproc_dict[name] if clear: out.clear() else: out = multiproc_dict[name] = multiproc_manager.dict() return out
[docs] def get_workers(): return active_workers['pool']
[docs] def get_proc_id(): return current_process().name
[docs] def init_workers(wdir, max_workers=None, **kwargs): if use_multiprocessing: sys.path.append(wdir) active_workers['pool'] = ProcessPoolExecutor(max_workers, **kwargs) return active_workers['pool']