home · contact · privacy
Avoid multiprocessing until it's really worth it.
authorChristian Heller <c.heller@plomlompom.de>
Tue, 8 Dec 2020 23:16:13 +0000 (00:16 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Tue, 8 Dec 2020 23:16:13 +0000 (00:16 +0100)
plomrogue/game.py

index 3b0b25f3afeacd77b732578e847a002982adf904..b0233b327574dba4ee8fe946395c68066a8e9130 100755 (executable)
@@ -230,7 +230,6 @@ class Game(GameBase):
         """Send out game state data relevant to clients."""
 
         # TODO: limit to connection_id if provided
-        print('DEBUG send_gamestate')
         self.io.send('TURN ' + str(self.turn))
         from plomrogue.mapping import FovMap
         import multiprocessing
@@ -242,15 +241,19 @@ class Game(GameBase):
             player = self.get_player(c_id)
             if player._fov:
                 continue
-            player.prepare_multiprocessible_fov_stencil() #!
+            player.prepare_multiprocessible_fov_stencil()
             player_fovs += [player._fov]
             player_fov_ids += [player.id_]
-            print('DEBUG regen FOV for', player.id_)
-        if len(player_fovs) > 0:
+        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])  #!
+            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_)