Exemplo n.º 1
0
class simple_allocator(object):
    def __init__(self):
        self.lock = threading.Lock()
        self.size = mmap.PAGESIZE
        self.offset = 0
        self.buf = SharedMemoryBuffer(self.size)

    def _allocate_tiny(self, size):
        free = self.size - self.offset
        if (size > free):
            self.size += mmap.PAGESIZE
            if (self.size > 1024**2): self.size = 1024**2
            self.buf = SharedMemoryBuffer(self.size)
            self.offset = size
            addr, _ = self.buf.getbuffer()
            return 0, self.buf
        else:
            offset = self.offset
            self.offset += size
            addr, _ = self.buf.getbuffer()
            return offset, self.buf

    def _allocate_big(self, size):
        buf = SharedMemoryBuffer(size)
        addr, _ = buf.getbuffer()
        return 0, buf

    def allocate(self, size):
        with self.lock:
            if size > mmap.PAGESIZE:
                offset, buf = self._allocate_big(size)
            else:
                offset, buf = self._allocate_tiny(size)
        return offset, buf
Exemplo n.º 2
0
 def _allocate_tiny(self, size):
     free = self.size - self.offset
     if (size > free):
         self.size += mmap.PAGESIZE
         if (self.size > 1024**2): self.size = 1024**2
         self.buf = SharedMemoryBuffer(self.size)
         self.offset = size
         addr, _ = self.buf.getbuffer()
         return 0, self.buf
     else:
         offset = self.offset
         self.offset += size
         addr, _ = self.buf.getbuffer()
         return offset, self.buf
Exemplo n.º 3
0
 def _allocate_tiny(self, size):
     free = self.size - self.offset
     if (size > free):
         self.size += mmap.PAGESIZE
         if (self.size > 1024**2): self.size = 1024**2
         self.buf = SharedMemoryBuffer(self.size)
         self.offset = size
         addr, _= self.buf.getbuffer()
         return 0, self.buf
     else:
         offset = self.offset
         self.offset += size
         addr, _= self.buf.getbuffer()
         return offset, self.buf
Exemplo n.º 4
0
class simple_allocator(object):

    def __init__(self):
        self.lock = threading.Lock()
        self.size = mmap.PAGESIZE
        self.offset = 0
        self.buf = SharedMemoryBuffer(self.size)

    def _allocate_tiny(self, size):
        free = self.size - self.offset
        if (size > free):
            self.size += mmap.PAGESIZE
            if (self.size > 1024**2): self.size = 1024**2
            self.buf = SharedMemoryBuffer(self.size)
            self.offset = size
            addr, _= self.buf.getbuffer()
            return 0, self.buf
        else:
            offset = self.offset
            self.offset += size
            addr, _= self.buf.getbuffer()
            return offset, self.buf
            
    def _allocate_big(self, size):
        buf = SharedMemoryBuffer(size)
        addr, _ = buf.getbuffer()
        return 0, buf

        
    def allocate(self, size):
        with self.lock:
            if size > mmap.PAGESIZE:
                offset, buf = self._allocate_big(size)
            else:
                offset, buf = self._allocate_tiny(size)
        return offset, buf
Exemplo n.º 5
0
 def _allocate_big(self, size):
     buf = SharedMemoryBuffer(size)
     addr, _ = buf.getbuffer()
     return 0, buf
Exemplo n.º 6
0
 def __init__(self):
     self.lock = threading.Lock()
     self.size = mmap.PAGESIZE
     self.offset = 0
     self.buf = SharedMemoryBuffer(self.size)
Exemplo n.º 7
0
 def _allocate_big(self, size):
     buf = SharedMemoryBuffer(size)
     addr, _ = buf.getbuffer()
     return 0, buf
Exemplo n.º 8
0
 def __init__(self):
     self.lock = threading.Lock()
     self.size = mmap.PAGESIZE
     self.offset = 0
     self.buf = SharedMemoryBuffer(self.size)