Skip to content

Instantly share code, notes, and snippets.

@gklka
Created August 2, 2016 13:23
Show Gist options
  • Save gklka/c736d46aac6ea244ecd2cc9addf2c24f to your computer and use it in GitHub Desktop.
Save gklka/c736d46aac6ea244ecd2cc9addf2c24f to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import time
import datetime
import threading
from TrackSimulator import TrackSimulator
from engine.Common import p
RUN_DELAY = 0 # sec
class TrackSimulatorThread(threading.Thread):
"""Run TrackSimulator on a thread"""
track_simulator = None
thread_number = None
rainbow = False
def __init__(self, thread_number, shift=None, speed=None, regatta_id=None, group_id=None, rainbow=False):
threading.Thread.__init__(self)
if rainbow:
self.track_simulator = TrackSimulator(num=thread_number, speed=speed, regatta_id=regatta_id, group_id=group_id, rainbow=True)
else:
self.track_simulator = TrackSimulator(num=thread_number, shift=shift, speed=speed, regatta_id=regatta_id, group_id=group_id)
self.thread_number = thread_number
def run(self):
p(self, "TrackSimulator on thread %s" % self.thread_number)
self.track_simulator.main()
class MultiRun():
"""Kwindoo Track Simulator multiple runner"""
version = 0.2
num = 1
shift = None
speed = 1
regatta_id = 0
group_id = 0
rainbow = False
def parse_params(self):
# Num
if "--num" in sys.argv:
arg_number = sys.argv.index("--num")
try:
self.num = int(sys.argv[arg_number+1])
if self.num == 0:
self.num = 1
except:
pass
# Time difference
self.shift = datetime.timedelta(seconds = 0)
if "--shift" in sys.argv:
arg_number = sys.argv.index("--shift")
try:
seconds = int(sys.argv[arg_number+1])
self.shift = datetime.timedelta(seconds = seconds)
except:
pass
# Speed
if "--speed" in sys.argv:
arg_number = sys.argv.index("--speed")
try:
self.speed = 1.0/float(sys.argv[arg_number+1])
except:
pass
# Help
if "--help" in sys.argv:
self.print_help()
exit()
if "--version" in sys.argv:
print "KWINDOO Track Simulator MultiRun v%s" % self.version
exit()
# Regatta ID
if "--regatta" in sys.argv:
arg_number = sys.argv.index("--regatta")
try:
regatta_id = int(sys.argv[arg_number+1])
if regatta_id > 0:
self.regatta_id = regatta_id
except:
pass
if not self.regatta_id:
self.print_help()
p(self, "Missing --regatta", type='red')
exit()
# Running group ID
if "--group" in sys.argv:
arg_number = sys.argv.index("--group")
try:
group_id = int(sys.argv[arg_number+1])
if group_id > 0:
self.group_id = group_id
except:
pass
if not self.group_id:
self.print_help()
p(self, "Missing --group", type='red')
exit()
# Rainbow
if "--rainbow" in sys.argv:
self.rainbow = True
def print_help(self):
print "KWINDOO Track Simulator MultiRun v%s" % self.version
print "For running multiple ship simulations easily"
print "(c) Kwindoo, 2016"
print ""
print "usage: python %s [--num number] --regatta regatta_id --group group_id [--rainbow]" % sys.argv[0]
print ""
print "--num : number of test users to simulate (default: 1)"
print "--regatta : the regatta to send the data to"
print "--group : the running group id to join to"
print "--rainbow : use simulated parallel lines instead of numbered GPX files"
def main(self):
# Parse params
self.parse_params()
p(self, "Creating %s simulator(s)..." % self.num)
track_simulators = []
for i in range(self.num):
track_simulator_thread = TrackSimulatorThread(thread_number=i+1, speed=self.speed, shift=self.shift, regatta_id=self.regatta_id, group_id=self.group_id, rainbow=self.rainbow)
track_simulator_thread.setDaemon(True)
track_simulators.append(track_simulator_thread)
i = 1
for track_simulator_thread in track_simulators:
p(self, "Running simulator %i..." % i, type='blue')
track_simulator_thread.start()
i += 1
time.sleep(RUN_DELAY)
# Run the code
if __name__ == "__main__":
mr = MultiRun()
mr.main()
time.sleep(10000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment