@@ -2181,7 +2181,12 @@ <h3 id="codeclash.arenas.battlesnake.battlesnake.BattleSnakeArena.execute_round"
21812181< span class ="normal "> 144</ span >
21822182< span class ="normal "> 145</ span >
21832183< span class ="normal "> 146</ span >
2184- < span class ="normal "> 147</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> execute_round</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> agents</ span > < span class ="p "> :</ span > < span class ="nb "> list</ span > < span class ="p "> [</ span > < span class ="n "> Player</ span > < span class ="p "> ]):</ span >
2184+ < span class ="normal "> 147</ span >
2185+ < span class ="normal "> 148</ span >
2186+ < span class ="normal "> 149</ span >
2187+ < span class ="normal "> 150</ span >
2188+ < span class ="normal "> 151</ span >
2189+ < span class ="normal "> 152</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> execute_round</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> agents</ span > < span class ="p "> :</ span > < span class ="nb "> list</ span > < span class ="p "> [</ span > < span class ="n "> Player</ span > < span class ="p "> ]):</ span >
21852190 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _failed_to_start_player</ span > < span class ="o "> =</ span > < span class ="p "> []</ span >
21862191 < span class ="k "> assert</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> agents</ span > < span class ="p "> )</ span > < span class ="o "> ></ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="s2 "> "Battlesnake requires at least two players"</ span >
21872192 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> logger</ span > < span class ="o "> .</ span > < span class ="n "> debug</ span > < span class ="p "> (</ span > < span class ="s2 "> "Starting game servers"</ span > < span class ="p "> )</ span >
@@ -2214,8 +2219,13 @@ <h3 id="codeclash.arenas.battlesnake.battlesnake.BattleSnakeArena.execute_round"
22142219 < span class ="k "> try</ span > < span class ="p "> :</ span >
22152220 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> logger</ span > < span class ="o "> .</ span > < span class ="n "> info</ span > < span class ="p "> (</ span > < span class ="sa "> f</ span > < span class ="s2 "> "Running game with players: </ span > < span class ="si "> {</ span > < span class ="nb "> list</ span > < span class ="p "> (</ span > < span class ="n "> player2port</ span > < span class ="o "> .</ span > < span class ="n "> keys</ span > < span class ="p "> ())</ span > < span class ="si "> }</ span > < span class ="s2 "> "</ span > < span class ="p "> )</ span >
22162221
2217- < span class ="c1 "> # Use ThreadPoolExecutor for parallel execution</ span >
2218- < span class ="k "> with</ span > < span class ="n "> ThreadPoolExecutor</ span > < span class ="p "> (</ span > < span class ="mi "> 20</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> executor</ span > < span class ="p "> :</ span >
2222+ < span class ="c1 "> # Use ThreadPoolExecutor for parallel execution. Concurrency is configurable</ span >
2223+ < span class ="c1 "> # (game.sim_concurrency): the single-threaded bot servers serialize move</ span >
2224+ < span class ="c1 "> # requests, so total concurrency across all parallel pairs must stay bounded or</ span >
2225+ < span class ="c1 "> # responses exceed the move timeout and games degenerate. When running many pairs</ span >
2226+ < span class ="c1 "> # concurrently (ladder --workers), lower this so workers*sim_concurrency stays ~20.</ span >
2227+ < span class ="n "> max_sim_workers</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> game_config</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "sim_concurrency"</ span > < span class ="p "> ,</ span > < span class ="mi "> 20</ span > < span class ="p "> )</ span >
2228+ < span class ="k "> with</ span > < span class ="n "> ThreadPoolExecutor</ span > < span class ="p "> (</ span > < span class ="n "> max_sim_workers</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> executor</ span > < span class ="p "> :</ span >
22192229 < span class ="c1 "> # Submit all simulations to the thread pool</ span >
22202230 < span class ="n "> futures</ span > < span class ="o "> =</ span > < span class ="p "> [</ span >
22212231 < span class ="n "> executor</ span > < span class ="o "> .</ span > < span class ="n "> submit</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _run_single_simulation</ span > < span class ="p "> ,</ span > < span class ="n "> player2port</ span > < span class ="p "> ,</ span > < span class ="n "> idx</ span > < span class ="p "> )</ span >
@@ -2254,12 +2264,7 @@ <h3 id="codeclash.arenas.battlesnake.battlesnake.BattleSnakeArena.get_results" c
22542264
22552265 < details class ="mkdocstrings-source ">
22562266 < summary > Source code in < code > codeclash/arenas/battlesnake/battlesnake.py</ code > </ summary >
2257- < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 149</ span >
2258- < span class ="normal "> 150</ span >
2259- < span class ="normal "> 151</ span >
2260- < span class ="normal "> 152</ span >
2261- < span class ="normal "> 153</ span >
2262- < span class ="normal "> 154</ span >
2267+ < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 154</ span >
22632268< span class ="normal "> 155</ span >
22642269< span class ="normal "> 156</ span >
22652270< span class ="normal "> 157</ span >
@@ -2282,7 +2287,12 @@ <h3 id="codeclash.arenas.battlesnake.battlesnake.BattleSnakeArena.get_results" c
22822287< span class ="normal "> 174</ span >
22832288< span class ="normal "> 175</ span >
22842289< span class ="normal "> 176</ span >
2285- < span class ="normal "> 177</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> get_results</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> agents</ span > < span class ="p "> :</ span > < span class ="nb "> list</ span > < span class ="p "> [</ span > < span class ="n "> Player</ span > < span class ="p "> ],</ span > < span class ="n "> round_num</ span > < span class ="p "> :</ span > < span class ="nb "> int</ span > < span class ="p "> ,</ span > < span class ="n "> stats</ span > < span class ="p "> :</ span > < span class ="n "> RoundStats</ span > < span class ="p "> ):</ span >
2290+ < span class ="normal "> 177</ span >
2291+ < span class ="normal "> 178</ span >
2292+ < span class ="normal "> 179</ span >
2293+ < span class ="normal "> 180</ span >
2294+ < span class ="normal "> 181</ span >
2295+ < span class ="normal "> 182</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> get_results</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> agents</ span > < span class ="p "> :</ span > < span class ="nb "> list</ span > < span class ="p "> [</ span > < span class ="n "> Player</ span > < span class ="p "> ],</ span > < span class ="n "> round_num</ span > < span class ="p "> :</ span > < span class ="nb "> int</ span > < span class ="p "> ,</ span > < span class ="n "> stats</ span > < span class ="p "> :</ span > < span class ="n "> RoundStats</ span > < span class ="p "> ):</ span >
22862296 < span class ="n "> scores</ span > < span class ="o "> =</ span > < span class ="n "> defaultdict</ span > < span class ="p "> (</ span > < span class ="nb "> int</ span > < span class ="p "> )</ span >
22872297 < span class ="n "> available_players</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="n "> player</ span > < span class ="o "> .</ span > < span class ="n "> name</ span > < span class ="k "> for</ span > < span class ="n "> player</ span > < span class ="ow "> in</ span > < span class ="n "> agents</ span > < span class ="k "> if</ span > < span class ="n "> player</ span > < span class ="o "> .</ span > < span class ="n "> name</ span > < span class ="ow "> not</ span > < span class ="ow "> in</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _failed_to_start_player</ span > < span class ="p "> ]</ span >
22882298 < span class ="k "> if</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> available_players</ span > < span class ="p "> )</ span > < span class ="o "> ></ span > < span class ="mi "> 1</ span > < span class ="p "> :</ span >
@@ -2333,12 +2343,7 @@ <h3 id="codeclash.arenas.battlesnake.battlesnake.BattleSnakeArena.validate_code"
23332343
23342344 < details class ="mkdocstrings-source ">
23352345 < summary > Source code in < code > codeclash/arenas/battlesnake/battlesnake.py</ code > </ summary >
2336- < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 179</ span >
2337- < span class ="normal "> 180</ span >
2338- < span class ="normal "> 181</ span >
2339- < span class ="normal "> 182</ span >
2340- < span class ="normal "> 183</ span >
2341- < span class ="normal "> 184</ span >
2346+ < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 184</ span >
23422347< span class ="normal "> 185</ span >
23432348< span class ="normal "> 186</ span >
23442349< span class ="normal "> 187</ span >
@@ -2355,7 +2360,12 @@ <h3 id="codeclash.arenas.battlesnake.battlesnake.BattleSnakeArena.validate_code"
23552360< span class ="normal "> 198</ span >
23562361< span class ="normal "> 199</ span >
23572362< span class ="normal "> 200</ span >
2358- < span class ="normal "> 201</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> validate_code</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> agent</ span > < span class ="p "> :</ span > < span class ="n "> Player</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="nb "> tuple</ span > < span class ="p "> [</ span > < span class ="nb "> bool</ span > < span class ="p "> ,</ span > < span class ="nb "> str</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="p "> ]:</ span >
2363+ < span class ="normal "> 201</ span >
2364+ < span class ="normal "> 202</ span >
2365+ < span class ="normal "> 203</ span >
2366+ < span class ="normal "> 204</ span >
2367+ < span class ="normal "> 205</ span >
2368+ < span class ="normal "> 206</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> validate_code</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> agent</ span > < span class ="p "> :</ span > < span class ="n "> Player</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="nb "> tuple</ span > < span class ="p "> [</ span > < span class ="nb "> bool</ span > < span class ="p "> ,</ span > < span class ="nb "> str</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="p "> ]:</ span >
23592369 < span class ="n "> listing</ span > < span class ="o "> =</ span > < span class ="n "> agent</ span > < span class ="o "> .</ span > < span class ="n "> environment</ span > < span class ="o "> .</ span > < span class ="n "> execute</ span > < span class ="p "> (</ span > < span class ="s2 "> "ls"</ span > < span class ="p "> )[</ span > < span class ="s2 "> "output"</ span > < span class ="p "> ]</ span >
23602370 < span class ="c1 "> # Non-Python submissions declare how to launch their server via run.sh (any</ span >
23612371 < span class ="c1 "> # language). We trust the launch script here; a broken one is caught at runtime</ span >
0 commit comments