Guest User

MultiProcess compete.py

a guest
Nov 22nd, 2013
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.93 KB | None | 0 0
  1. import ast
  2. import game
  3. import sys
  4. import os
  5. from multiprocessing import Process, Manager
  6. from settings import settings
  7.  
  8. def make_player(fname):
  9.     return game.Player(open(fname).read())
  10.  
  11. def run_once(map_name,procname,return_dict):
  12.     map_data = ast.literal_eval(open(map_name).read())
  13.     game.init_settings(map_data)
  14.    
  15.     players = [make_player(x) for x in sys.argv[1:3]]
  16.     g = game.Game(*players, record_turns=False)
  17.    
  18.     for i in range(settings['max_turns']):  # @UnusedVariable
  19.         g.run_turn()
  20.  
  21.     return_dict[procname] = g.get_scores()
  22.  
  23.  
  24. if __name__ == '__main__':
  25.     manager = Manager()
  26.     return_dict = manager.dict()
  27.     jobs = []
  28.     if len(sys.argv) < 3:
  29.         print 'usage: python run.py <usercode1.py> <usercode2.py> [<map file>]'
  30.         sys.exit()
  31.  
  32.     num_games = 1
  33.     map_name = os.path.join(os.path.dirname(__file__), 'maps/default.py')
  34.     try:
  35.         num_games = int(sys.argv[3])
  36.     except:
  37.         if len(sys.argv) > 3:
  38.             map_name = sys.argv[3]
  39.     scores = [0, 0]
  40.     scores2 = [0, 0]
  41.     print 'running ' + str(num_games) + ' games'
  42.     for i in range(1, num_games):
  43.         p = Process(target=run_once, args=(map_name,i,return_dict))
  44.         jobs.append(p)
  45.         p.start()
  46.     for proc in jobs:
  47.         proc.join()
  48.     #print return_dict.values()
  49.         #current_scores = run_once(map_name)
  50.         #scores[0] += current_scores[0]
  51.         #scores[1] += current_scores[1]
  52.     for x in return_dict.values():
  53.         if x[0] > x[1]:
  54.             scores[0] += 1
  55.         else:
  56.             scores[1] += 1
  57.     print
  58.  
  59.     print "Games Won:"
  60.     print sys.argv[1][:-3]+":",scores[0],"||",sys.argv[2][:-3]+":", scores[1]
  61.     scores2 = [0,0]
  62.     for x in return_dict.values():
  63.         scores2[0] += x[0]
  64.         scores2[1] += x[1]
  65.     print
  66.  
  67.     print "Remaining Robots:"
  68.     print sys.argv[1][:-3]+":",scores2[0],"||",sys.argv[2][:-3]+":", scores2[1]
  69.  
  70.  
  71.  
  72.  
  73. #   print "!",scores[0] / num_games, scores[1] / num_games
  74.     if scores[0] > scores[1]:
  75.         print sys.argv[1][:-3] + ' won'
  76.     elif scores[0] < scores[1]:
  77.         print sys.argv[2][:-3] + ' won'
  78.     else:
  79.         print 'game is a draw'
Advertisement
Add Comment
Please, Sign In to add comment