def q_map(self):
# Creates threads that call q_mapsingle() on each directory (replica)
# returns a tuple (mapped_directories, failed_directories)
self._mapped = []
self._failed = []
trs = []
for md in self._map_dirs:
num = threading.activeCount() - 1 # -1: one thread is the main thread
while num == self._nthreads:
time.sleep(0.3)
num = threading.activeCount() - 1 # -1: one thread is the main thread
if num < self._nthreads:
trs.append( _Mapthread(self, md) )
trs[-1].start()
# wait for threads to finish, save their response
for t in trs:
while t.isAlive():
t.join(1.0)
if t.error:
self._failed.append( (t.path, t.error) )
else:
self._mapped.append( t.path )
if not self._mapped:
errstr=""
for m,er in self._failed:
errstr += "%s -> %s\n" % (os.path.relpath(m), er)
raise QMappingError("All %s directories failed to map!\n%s" % ( len(self.get_mapdirs()), errstr) )
return (self._mapped, self._failed)
评论列表
文章目录