-
Notifications
You must be signed in to change notification settings - Fork 2
/
RuSDiverseMotor.py
42 lines (35 loc) · 1.1 KB
/
RuSDiverseMotor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from Utils import LoadCar, LoadMotor
from FactorBP.FindNearSol import RunDataMModes
from FactorBP.DiverseMBest import RunDataSDiverse, RunDataPDiverse
import multiprocessing as mp
from itertools import product
import numpy as np
#~
# parallelism
#~
def worker(f, inQ, outQ, kw=None):
while True:
x = inQ.get()
if x is None:
break
outQ.put(f(x, **kw))
def pmap(f, tasks, n_jobs=mp.cpu_count(), **kw):
n_jobs = min(n_jobs, len(tasks)) # XXX explicitly avoid zombies
inQ, outQ = mp.Queue(), mp.Queue()
procs = [mp.Process(target=worker, args=(f, inQ, outQ, kw)) for _ in range(n_jobs)]
for p in procs:
p.daemon = True
p.start()
for x in tasks:
inQ.put(x)
for _ in range(n_jobs):
inQ.put(None)
results = [outQ.get() for _ in range(len(tasks))]
for p in procs:
p.join()
return results
CarData = LoadMotor()
Index = range(1,21)
NOus = range(0,21)
Deltas = np.arange(0.1,1.01,0.1)
pmap(RunDataSDiverse, [('Motor', CarData, idx, NofOus, Delta) for (idx,NofOus,Delta) in product(Index,NOus,Deltas) ], n_jobs=32)