moved a bit of code to a generator function
This'll make it easier to incrementally add tasks to the queue. I would have gone ahead and done that now, but I'm out of time for the night.
This commit is contained in:
46
quadtree.py
46
quadtree.py
@@ -178,6 +178,29 @@ class QuadtreeGen(object):
|
|||||||
shutil.rmtree(getpath("3"))
|
shutil.rmtree(getpath("3"))
|
||||||
os.rename(getpath("new3"), getpath("3"))
|
os.rename(getpath("new3"), getpath("3"))
|
||||||
|
|
||||||
|
def _apply_render_worldtiles(self, pool):
|
||||||
|
"""Returns an iterator over result objects. Each time a new result is
|
||||||
|
requested, a new task is added to the pool and a result returned.
|
||||||
|
"""
|
||||||
|
for path in iterate_base4(self.p):
|
||||||
|
# Get the range for this tile
|
||||||
|
colstart, rowstart = self._get_range_by_path(path)
|
||||||
|
colend = colstart + 2
|
||||||
|
rowend = rowstart + 4
|
||||||
|
|
||||||
|
# This image is rendered at:
|
||||||
|
dest = os.path.join(self.destdir, "tiles", *(str(x) for x in path))
|
||||||
|
|
||||||
|
# And uses these chunks
|
||||||
|
tilechunks = self._get_chunks_in_range(colstart, colend, rowstart,
|
||||||
|
rowend)
|
||||||
|
|
||||||
|
# Put this in the pool
|
||||||
|
# (even if tilechunks is empty, render_worldtile will delete
|
||||||
|
# existing images if appropriate)
|
||||||
|
yield pool.apply_async(func=render_worldtile, args= (tilechunks,
|
||||||
|
colstart, colend, rowstart, rowend, dest))
|
||||||
|
|
||||||
def go(self, procs):
|
def go(self, procs):
|
||||||
"""Renders all tiles"""
|
"""Renders all tiles"""
|
||||||
|
|
||||||
@@ -204,27 +227,8 @@ class QuadtreeGen(object):
|
|||||||
print "Computing the tile ranges and starting tile processers for inner-most tiles..."
|
print "Computing the tile ranges and starting tile processers for inner-most tiles..."
|
||||||
print "This takes the longest. The other levels will go quicker"
|
print "This takes the longest. The other levels will go quicker"
|
||||||
results = []
|
results = []
|
||||||
for path in iterate_base4(self.p):
|
for result in self._apply_render_worldtiles(pool):
|
||||||
# Get the range for this tile
|
results.append(result)
|
||||||
colstart, rowstart = self._get_range_by_path(path)
|
|
||||||
colend = colstart + 2
|
|
||||||
rowend = rowstart + 4
|
|
||||||
|
|
||||||
# This image is rendered at:
|
|
||||||
dest = os.path.join(self.destdir, "tiles", *(str(x) for x in path))
|
|
||||||
|
|
||||||
# And uses these chunks
|
|
||||||
tilechunks = self._get_chunks_in_range(colstart, colend, rowstart,
|
|
||||||
rowend)
|
|
||||||
|
|
||||||
# Put this in the pool
|
|
||||||
# (even if tilechunks is empty, render_worldtile will delete
|
|
||||||
# existing images if appropriate)
|
|
||||||
results.append(
|
|
||||||
pool.apply_async(func=render_worldtile, args=
|
|
||||||
(tilechunks, colstart, colend, rowstart, rowend, dest)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
self.write_html(self.p)
|
self.write_html(self.p)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user