Skip to content
Extraits de code Groupes Projets
buffer.py 1,7 ko
Newer Older
  • Learn to ignore specific revisions
  • from random import random
    
    class detector:
        def __init__(self, depth, read_time = 8):
            self.events = []
            self.depth = depth
            self.read_time = read_time
    
    
        def read_buffer(self,time):
            if len(self.events) > 0 and self.events[0] < time:
                self.events = self.events[1:]
                return True
            else:
                return False
        
        def add_event(self,time):
            # First, clear any event that could be read
            while(self.read_buffer(time)):
                pass
            #self.read_buffer(time)
    
            #Then, try to add event at the end of queue
            if len(self.events) < self.depth:
                if len(self.events) == 0:
                    self.events.append(time+self.read_time-1)
                else:
                    self.events.append(self.events[-1]+self.read_time)
    
                return True
            else:
                return False
    
    
    
    def get_eff(proba, depth, read_time = 8, total_time = 1e5):
        my_det = detector(depth, read_time)
        n_accept = 0
        n_total  = 0
        for time in range(int(total_time)):
            if random() < proba:
                n_total += 1
                if my_det.add_event(time):
                    n_accept += 1
        return n_accept/n_total
    
    def scan_eff(proba, threshold = 0.98, read_time = 8):
        queue_depth  = 1
        detector_eff = get_eff(proba,1, read_time)
        print("If no queue and p = {}% : eff = {:3f}%".format(100*proba, 100*detector_eff))
        while (detector_eff < threshold and queue_depth < 50):
            queue_depth += 1
            detector_eff = get_eff(proba,queue_depth, read_time)
            print("If {} events queue and p = {} % : eff = {:3f}%".format(queue_depth,100*proba,100*detector_eff))
    
    
    scan_eff(0.1)
    scan_eff(0.125)
    scan_eff(0.05)
    scan_eff(1)