Passed
Pull Request — master (#101)
by Simon
01:48
created

distribution   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 46
rs 10
c 0
b 0
f 0
wmc 6

4 Functions

Rating   Name   Duplication   Size   Complexity  
A single_process() 0 2 1
A pathos_wrapper() 0 7 2
A joblib_wrapper() 0 8 1
A multiprocessing_wrapper() 0 7 2
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
from sys import platform
6
from tqdm import tqdm
7
8
if platform.startswith("linux"):
9
    initializer = tqdm.set_lock
10
    initargs = (tqdm.get_lock(),)
11
else:
12
    initializer = None
13
    initargs = ()
14
15
16
def single_process(process_func, process_infos):
17
    return [process_func(*info) for info in process_infos]
18
19
20
def multiprocessing_wrapper(process_func, process_infos, n_processes):
21
    import multiprocessing as mp
22
23
    with mp.Pool(
24
        n_processes, initializer=initializer, initargs=initargs
25
    ) as pool:
26
        return pool.map(process_func, process_infos)
27
28
29
def pathos_wrapper(process_func, search_processes_paras, n_processes):
30
    import pathos.multiprocessing as pmp
31
32
    with pmp.Pool(
33
        n_processes, initializer=initializer, initargs=initargs
34
    ) as pool:
35
        return pool.map(process_func, search_processes_paras)
36
37
38
def joblib_wrapper(process_func, search_processes_paras, n_processes):
39
    from joblib import Parallel, delayed
40
41
    jobs = [
42
        delayed(process_func)(*info_dict)
43
        for info_dict in search_processes_paras
44
    ]
45
    return Parallel(n_jobs=n_processes)(jobs)
46