Source code for sfepy.base.multiproc
"""
Multiprocessing functions.
"""
try:
from mpi4py import MPI
use_multiprocessing_mpi = MPI.COMM_WORLD.Get_size() > 1
except ImportError:
use_multiprocessing_mpi = False
try:
import sys
if sys.platform.startswith('win'):
#
# Multiprocessing-proc implementation is currently broken on Windows platform
# TBD: Fix (engine.py ??)
#
use_multiprocessing_proc = False
else:
from multiprocessing import cpu_count
use_multiprocessing_proc = cpu_count() > 1
except:
use_multiprocessing_proc = False
if use_multiprocessing_mpi:
import sfepy.base.multiproc_mpi as multiproc_mpi
if use_multiprocessing_proc:
import sfepy.base.multiproc_proc as multiproc_proc
use_multiprocessing = use_multiprocessing_mpi or use_multiprocessing_proc
multiprocessing_mode = None
multiprocessing_module = None
[docs]def get_multiproc(mpi=False):
global multiprocessing_mode, multiprocessing_module
try_proc = True
multiproc, mode = None, None
if mpi and use_multiprocessing_mpi:
multiproc, mode = multiproc_mpi, 'mpi'
try_proc = False
if try_proc and use_multiprocessing_proc:
multiproc, mode = multiproc_proc, 'proc'
multiprocessing_mode = mode
multiprocessing_module = multiproc
return multiproc, mode
[docs]def get_num_workers():
"""Get the number of slave nodes."""
mpi = multiprocessing_mode == 'mpi'
return multiproc_mpi.cpu_count() - 1 if mpi else\
multiproc_proc.cpu_count()
[docs]def is_remote_dict(d):
if multiprocessing_module is not None:
return multiprocessing_module.is_remote_dict(d)
else:
return False