+ from plomrogue.mapping import FovMap
+ import multiprocessing
+ c_ids = [c_id for c_id in self.sessions]
+ # Only recalc FOVs for players with ._fov = None
+ player_fovs = []
+ player_fov_ids = []
+ for c_id in c_ids:
+ player = self.get_player(c_id)
+ if player._fov:
+ continue
+ player.prepare_multiprocessible_fov_stencil()
+ player_fovs += [player._fov]
+ player_fov_ids += [player.id_]
+ new_fovs = []
+ single_core_until = 8 # since multiprocess has its own overhead
+ if len(player_fovs) > single_core_until:
+ pool = multiprocessing.Pool()
+ new_fovs = pool.map(FovMap.init_terrain, [fov for fov in player_fovs])
+ pool.close()
+ pool.join()
+ elif len(player_fovs) <= single_core_until:
+ for fov in player_fovs:
+ new_fovs += [fov.init_terrain()]
+ for i in range(len(player_fov_ids)):
+ id_ = player_fov_ids[i]
+ player = self.get_thing(id_)
+ player._fov = new_fovs[i]
+ for c_id in c_ids: