43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
import asyncio
|
|
from os import getenv
|
|
|
|
import db
|
|
import util
|
|
from processing import process
|
|
|
|
KEYNAME = "queue"
|
|
|
|
# Chunk size
|
|
CHUNK_SIZE = int(getenv("MONOLITH_INGEST_CHUNK_SIZE", "900"))
|
|
ITER_DELAY = float(getenv("MONOLITH_INGEST_ITER_DELAY", "0.5"))
|
|
|
|
log = util.get_logger("ingest")
|
|
|
|
|
|
class Ingest(object):
|
|
def __init__(self):
|
|
name = self.__class__.__name__
|
|
self.log = util.get_logger(name)
|
|
self.current_chunk = 0
|
|
self.log.info(
|
|
(
|
|
"Starting ingest handler for chunk size of "
|
|
f"{CHUNK_SIZE} every {ITER_DELAY} seconds."
|
|
)
|
|
)
|
|
|
|
async def run(self):
|
|
while True:
|
|
await self.get_chunk()
|
|
self.log.debug(f"Ingest chunk {self.current_chunk} complete")
|
|
self.current_chunk += 1
|
|
await asyncio.sleep(ITER_DELAY)
|
|
|
|
async def get_chunk(self):
|
|
length = await db.ar.llen(KEYNAME)
|
|
if length > CHUNK_SIZE:
|
|
length = CHUNK_SIZE
|
|
if not length:
|
|
return
|
|
await process.spawn_processing_threads(self.current_chunk, length)
|