renders now work with the multiprocessing dispatcher
This commit is contained in:
@@ -420,11 +420,12 @@ dir but you forgot to put quotes around the directory, since it contains spaces.
|
|||||||
tilesets.append(tset)
|
tilesets.append(tset)
|
||||||
|
|
||||||
|
|
||||||
# non-multiprocessing dispatcher
|
# multiprocessing dispatcher
|
||||||
dispatch = dispatcher.Dispatcher()
|
dispatch = dispatcher.MultiprocessingDispatcher()
|
||||||
def print_status(*args):
|
def print_status(*args):
|
||||||
logging.info("Status callback: %r", args)
|
logging.info("Status callback: %r", args)
|
||||||
dispatch.render_all(tilesets, print_status)
|
dispatch.render_all(tilesets, print_status)
|
||||||
|
dispatch.close()
|
||||||
|
|
||||||
|
|
||||||
sys.exit("early abort")
|
sys.exit("early abort")
|
||||||
|
|||||||
@@ -48,13 +48,14 @@ class Dispatcher(object):
|
|||||||
"""
|
"""
|
||||||
# TODO use status callback
|
# TODO use status callback
|
||||||
|
|
||||||
# setup tilesetlist
|
|
||||||
self.setup_tilesets(tilesetlist)
|
|
||||||
|
|
||||||
# preprocessing
|
# preprocessing
|
||||||
for tileset in tilesetlist:
|
for tileset in tilesetlist:
|
||||||
tileset.do_preprocessing()
|
tileset.do_preprocessing()
|
||||||
|
|
||||||
|
# setup tilesetlist
|
||||||
|
self.setup_tilesets(tilesetlist)
|
||||||
|
|
||||||
|
|
||||||
# iterate through all possible phases
|
# iterate through all possible phases
|
||||||
num_phases = [tileset.get_num_phases() for tileset in tilesetlist]
|
num_phases = [tileset.get_num_phases() for tileset in tilesetlist]
|
||||||
for phase in xrange(max(num_phases)):
|
for phase in xrange(max(num_phases)):
|
||||||
@@ -350,7 +351,7 @@ class MultiprocessingDispatcher(Dispatcher):
|
|||||||
finished_jobs += self._handle_messages()
|
finished_jobs += self._handle_messages()
|
||||||
return finished_jobs
|
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
|
# work function: takes results out of the result queue and
|
||||||
# keeps track of how many outstanding jobs remain
|
# keeps track of how many outstanding jobs remain
|
||||||
finished_jobs = []
|
finished_jobs = []
|
||||||
|
|||||||
@@ -46,10 +46,25 @@ class Textures(object):
|
|||||||
self.texture_size = 24
|
self.texture_size = 24
|
||||||
self.texture_dimensions = (self.texture_size, self.texture_size)
|
self.texture_dimensions = (self.texture_size, self.texture_size)
|
||||||
|
|
||||||
# these are filled in in generate()
|
# this is set in in generate()
|
||||||
self.terrain_images = None
|
self.generated = False
|
||||||
self.blockmap = []
|
|
||||||
self.biome_grass_texture = None
|
##
|
||||||
|
## 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()
|
## The big one: generate()
|
||||||
@@ -82,6 +97,8 @@ class Textures(object):
|
|||||||
block = tex[0]
|
block = tex[0]
|
||||||
scaled_block = block.resize(self.texture_dimensions, Image.ANTIALIAS)
|
scaled_block = block.resize(self.texture_dimensions, Image.ANTIALIAS)
|
||||||
blockmap[i] = self.generate_texture_tuple(scaled_block)
|
blockmap[i] = self.generate_texture_tuple(scaled_block)
|
||||||
|
|
||||||
|
self.generated = True
|
||||||
|
|
||||||
##
|
##
|
||||||
## Helpers for opening textures
|
## Helpers for opening textures
|
||||||
|
|||||||
Reference in New Issue
Block a user