i'm separating a script that has worked into separate slave and master modules as described in http://salilab.org/modeller/manual/node435.html.
my master script looks like this:
> j = job() > j.append(local_slave()) > j.append(local_slave()) > > for afile in alignFiles: > > alnRunDir = '%s%s/' % (dataDir,aname) > if not os.path.isdir(alnRunDir): > print "doAllAlign: Creating directory",alnRunDir > os.makedirs(alnRunDir) > > for runIdx in range(nruns): > j.queue_task(SeedTask(argumentList)) > > for result in j.yield_tasks_unordered(): > print result
and my slave task like this:
> class SeedTask(task): > """A task to read in a PDB file on the slave, and return the resolution""" > > def run(self,dataDir,afile,aname,runIdx,randMethod,knownLbl,seqLbl,nmodPerRun,atomDeviation ): > env = environ() > env.io.atom_files_directory = [dataDir] > arg4seed = - (int(runIdx) + 2) > env = environ(arg4seed) > > runDir = '%s/%s/run_%02d/' % (dataDir,aname,runIdx) > if not os.path.isdir(runDir): > print "doAllAlign: Creating directory",runDir > os.makedirs(runDir) > > os.chdir(runDir) > > a = automodel(env, alnfile=afile, > knowns=knownLbl, sequence=seqLbl, > assess_methods=(assess.DOPE, assess.GA341)) > > a.starting_model = 1 > # 2do: test task / run ratio? > a.ending_model = nmodPerRun > > a.deviation = atomDeviation > if randMethod=='XYZ': > a.rand_method = randomize.xyz > elif randMethod=='DIHEDRAL': > a.rand_method = randomize.dihedrals > > a.make()
i'm stepping thru with a debugger, and it gets to the yield_tasks_unordered() generator in the master. but as i attempt to make the next step it throws an exception that seems to have to do with env.io.atom_files_directory now (in the master/slave version) not getting set correctly?
> Running 14 tasks on 2 slaves > /usr/bin/python2.6 /usr/lib/modeller9.10/bin/modslave.py -slave 127.0.1.1:59861:0:BGRESKQY >& seed_align_pp.slave0 > /usr/bin/python2.6 /usr/lib/modeller9.10/bin/modslave.py -slave 127.0.1.1:59861:1:ZCQMRSNQ >& seed_align_pp.slave1 > Identified slave <Slave on localhost> > Identified slave <Slave on localhost> > Traceback (most recent call last): > File "/home/rik/Data/pkg/eclipse/plugins/org.python.pydev.debug_2.2.3.2011100616/pysrc/pydevd.py", line 1267, in <module> > debugger.run(setup['file'], None, None) > File "/home/rik/Data/pkg/eclipse/plugins/org.python.pydev.debug_2.2.3.2011100616/pysrc/pydevd.py", line 1020, in run > pydev_imports.execfile(file, globals, locals) #execute the script > File "/home/rik/Code/eclipse/modeller/src/seed_align_pp.py", line 98, in <module> > doAllAlign() > File "/home/rik/Code/eclipse/modeller/src/seed_align_pp.py", line 91, in doAllAlign > for result in j.yield_tasks_unordered(): > File "/usr/lib/python2.6/dist-packages/modeller/parallel/job.py", line 146, in yield_tasks_unordered > for task in self._finish_all_tasks(): > File "/usr/lib/python2.6/dist-packages/modeller/parallel/job.py", line 164, in _finish_all_tasks > task = self._process_event(obj, s) > File "/usr/lib/python2.6/dist-packages/modeller/parallel/job.py", line 180, in _process_event > task = obj.task_results() > File "/usr/lib/python2.6/dist-packages/modeller/parallel/slave.py", line 61, in task_results > r = self.get_data(allow_heartbeat=True) > File "/usr/lib/python2.6/dist-packages/modeller/parallel/communicator.py", line 89, in get_data > (cmdtype, obj) = self._recv() > File "/usr/lib/python2.6/dist-packages/modeller/parallel/communicator.py", line 130, in _recv > raise RemoteError(obj.exc, self) > modeller.parallel.communicator.RemoteError: <type 'IOError'>: pdbnam_____E> Filename for PDB code not found: 1A04A.pdb > Directories: > Extensions : :.atm:.pdb:.ent:.crd > (Also tried prepending 'pdb', looking for .Z, .gz, .bz2, .7z, .xz, > and trying PDB-style subdirectories - e.g. ab for pdb1abc.ent) > from <Slave on localhost>
would you know what i'm doing wrong here? thanks again for your help.
Rik