0

renders now work with the multiprocessing dispatcher

This commit is contained in:
Aaron Griffith
2012-01-06 21:56:26 -05:00
parent b31c4377ab
commit 1baf506a59
3 changed files with 29 additions and 10 deletions

View File

@@ -420,11 +420,12 @@ dir but you forgot to put quotes around the directory, since it contains spaces.
tilesets.append(tset)
# non-multiprocessing dispatcher
dispatch = dispatcher.Dispatcher()
# multiprocessing dispatcher
dispatch = dispatcher.MultiprocessingDispatcher()
def print_status(*args):
logging.info("Status callback: %r", args)
dispatch.render_all(tilesets, print_status)
dispatch.close()
sys.exit("early abort")

View File

@@ -48,13 +48,14 @@ class Dispatcher(object):
"""
# TODO use status callback
# setup tilesetlist
self.setup_tilesets(tilesetlist)
# preprocessing
for tileset in tilesetlist:
tileset.do_preprocessing()
# setup tilesetlist
self.setup_tilesets(tilesetlist)
# iterate through all possible phases
num_phases = [tileset.get_num_phases() for tileset in tilesetlist]
for phase in xrange(max(num_phases)):
@@ -350,7 +351,7 @@ class MultiprocessingDispatcher(Dispatcher):
finished_jobs += self._handle_messages()
return finished_jobs
def _handle_messages(self, timeout=1.0):
def _handle_messages(self, timeout=0.01):
# work function: takes results out of the result queue and
# keeps track of how many outstanding jobs remain
finished_jobs = []

View File

@@ -46,10 +46,25 @@ class Textures(object):
self.texture_size = 24
self.texture_dimensions = (self.texture_size, self.texture_size)
# these are filled in in generate()
self.terrain_images = None
self.blockmap = []
self.biome_grass_texture = None
# this is set in in generate()
self.generated = False
##
## pickle support
##
def __getstate__(self):
# we must get rid of the huge image lists, and other images
attributes = self.__dict__.copy()
for attr in ['terrain_images', 'blockmap', 'biome_grass_texture', 'watertexture', 'lavatexture']:
del attributes[attr]
return attributes
def __setstate__(self, attrs):
# regenerate textures, if needed
for attr, val in attrs.iteritems():
setattr(self, attr, val)
if self.generated:
self.generate()
##
## The big one: generate()
@@ -82,6 +97,8 @@ class Textures(object):
block = tex[0]
scaled_block = block.resize(self.texture_dimensions, Image.ANTIALIAS)
blockmap[i] = self.generate_texture_tuple(scaled_block)
self.generated = True
##
## Helpers for opening textures