from fe.bench.workload import Workload from fe.bench.workload import NewOrder from fe.bench.workload import Payment import time import threading class Session(threading.Thread): def __init__(self, wl: Workload): threading.Thread.__init__(self) self.workload = wl self.new_order_request = [] self.payment_request = [] self.payment_i = 0 self.new_order_i = 0 self.payment_ok = 0 self.new_order_ok = 0 self.time_new_order = 0 self.time_payment = 0 self.thread = None self.gen_procedure() def gen_procedure(self): for i in range(0, self.workload.procedure_per_session): new_order = self.workload.get_new_order() self.new_order_request.append(new_order) def run(self): self.run_gut() def run_gut(self): for new_order in self.new_order_request: before = time.time() ok, order_id = new_order.run() after = time.time() self.time_new_order = self.time_new_order + after - before self.new_order_i = self.new_order_i + 1 if ok: self.new_order_ok = self.new_order_ok + 1 payment = Payment(new_order.buyer, order_id) self.payment_request.append(payment) if self.new_order_i % 100 or self.new_order_i == len(self.new_order_request): self.workload.update_stat(self.new_order_i, self.payment_i, self.new_order_ok, self.payment_ok, self.time_new_order, self.time_payment) for payment in self.payment_request: before = time.time() ok = payment.run() after = time.time() self.time_payment = self.time_payment + after - before self.payment_i = self.payment_i + 1 if ok: self.payment_ok = self.payment_ok + 1 self.payment_request = []