118 def executeAll(self, parallel = 1):
119 if parallel > 1:
120
121 logging.info('Starting merge using up to %d hadd processes in parallel', parallel)
122 logging.warning('Parallel merging is experimental')
123 pool = Pool(processes = parallel)
124 parallelResultsArray = []
125 for job in self._haddJobArray:
126 parallelResultsArray.append(pool.apply_async(job, ()))
127 pool.close()
128
129
130 pool.join()
131
132
133
134 for i, job in enumerate(self._haddJobArray):
135 job.exitCode = parallelResultsArray[i].
get(timeout=0)
136
137 for job in self._haddJobArray:
138 if job.exitCode != 0:
139 logging.error('Merging job %s failed, exit code %s', job, job.exitCode)
140 sys.exit(1)
141 else:
142
143 for job in self._haddJobArray:
144 job.exe()
145 if job.exitCode != 0:
146 logging.error('Merging job %s failed, exit code %s', job, job.exitCode)
147 sys.exit(1)
148
149
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)