class BenchmarkWorker(Process): # region constructor def __init__(self, group=None, target=None, name=None, args=(), kwargs={}): super(BenchmarkWorker, self).__init__(group, target, name, args, kwargs) self.port = None self.user = None self.password = None self.database = None self.host = None self.queue = None self.adapter_class = None self.adapter = None self.benchmark = None self.query_loader = None self.query_list = [] self.query_count = 0 self.exit = Event() self.counter_reset = Event() # endregion def initialize(self): self.adapter = self.adapter_class( host=self.host, port=self.port, username=self.user, password=self.password, database=self.database ) self.query_loader = QueryLoader(self.benchmark, self.adapter.get_adapter_name()) self.query_list = self.query_loader.list_queries() def run(self): self.initialize() self.adapter.connect() while not self.exit.is_set(): for q in self.query_list: if self.exit.is_set(): break if self.counter_reset.is_set(): self.adapter.query_count = 0 self.counter_reset.clear() query = self.query_loader.get_query(q) self.adapter.query(query) self.query_count = self.adapter.query_count # Clear the queue - only one item should be there if not self.queue.empty(): self.queue.get() self.queue.put(self.query_count) def stop(self): self.exit.set() def reset_counter(self): self.counter_reset.set()