-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenWorker.py
56 lines (42 loc) · 1.74 KB
/
genWorker.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
43
44
45
46
47
48
49
50
51
52
53
54
import site
import inspect
import os
import shutil
import subprocess
import cPickle as pickle
import time
if __name__ == '__channelexec__':
#Setting up the proper paths on the end node
for sitedir in channel.receive():
site.addsitedir(sitedir)
#after adding paths import pyfica modules
from pyfica import model,param,fileio, genFitness
protocol = channel.receive()
if protocol == 'centralRead':
dica,comp,ficaWorkDir,ficaBin,i=channel.receive()
if protocol == 'localRead':
startTime = time.time()
dica,comp,ficaWorkDir,ficaBin,i, pickledOrigSpec = channel.receive()
origSpec = pickle.loads(pickledOrigSpec)
try:
os.makedirs(ficaWorkDir)
except:
shutil.rmtree(ficaWorkDir)
os.makedirs(ficaWorkDir)
#Writing configuration files
fileio.dicafile(os.path.join(ficaWorkDir,'dica.dat'),'w').write_data(dica)
fileio.compfile(os.path.join(ficaWorkDir,'comp.ind'),'w').write_data(comp)
#Launching Fica
proc=subprocess.Popen([ficaBin],stdout=-1,cwd=ficaWorkDir,shell=True,close_fds=True)
#Saving Log File:
file(os.path.join(ficaWorkDir,'fica.log'),'w').write(proc.stdout.read())
proc.stdout.close()
#reading or sending ficaWorkDir depending on protocol being used
if protocol == 'centralRead':
channel.send((protocol, i,ficaWorkDir))
elif protocol == 'localRead':
model = model.model.fromPath(ficaWorkDir, origSpec=origSpec,
fitFunc=genFitness.fitFunc, t=dica['t'],
execTime=time.time() - startTime)
pickledModel = pickle.dumps(model)
channel.send((protocol, i, pickledModel))