PyBitmessage-2021-04-27/src/class_objectProcessorQueue.py

25 lines
833 B
Python
Raw Normal View History

2019-08-18 04:24:26 +00:00
from queue import Queue
import threading
import time
2019-08-18 04:24:26 +00:00
class ObjectProcessorQueue(Queue):
maxSize = 32000000
def __init__(self):
2019-08-18 04:24:26 +00:00
Queue.__init__(self)
self.sizeLock = threading.Lock()
self.curSize = 0 # in Bytes. We maintain this to prevent nodes from flooing us with objects which take up too much memory. If this gets too big we'll sleep before asking for further objects.
def put(self, item, block = True, timeout = None):
while self.curSize >= self.maxSize:
time.sleep(1)
with self.sizeLock:
self.curSize += len(item[1])
2019-08-18 04:24:26 +00:00
Queue.put(self, item, block, timeout)
def get(self, block = True, timeout = None):
2019-08-18 04:24:26 +00:00
item = Queue.get(self, block, timeout)
with self.sizeLock:
self.curSize -= len(item[1])
return item