Source code for means.inference.parallelisation

"""
Parameter Inference Parallelisation
----

This part of the package provides helper functions to make parameter inference run in parallel.

"""

import multiprocessing

[docs]def multiprocessing_pool_initialiser(objects, infer_args, infer_kwargs): global inference_objects # Global is ok here as this function will be called for each process on separate threads inference_objects = objects global inference_args, inference_kwargs inference_args, inference_kwargs = infer_args, infer_kwargs
[docs]def multiprocessing_apply_infer(object_id): """ Used in the InferenceWithRestarts class. Needs to be in global scope for multiprocessing module to pick it up """ global inference_objects, inference_args, inference_kwargs return inference_objects[object_id]._infer_raw(*inference_args, **inference_kwargs)
[docs]def raw_results_in_parallel(inference_objects, number_of_processes, *args, **kwargs): p = multiprocessing.Pool(number_of_processes, initializer=multiprocessing_pool_initialiser, initargs=[inference_objects, args, kwargs]) results = p.map(multiprocessing_apply_infer, range(len(inference_objects))) p.close() return results