niming_igapi/backend/backend.py
2025-04-26 22:36:57 +00:00

64 lines
No EOL
1.8 KiB
Python

import logging
import random
import time
from backend import processor
from config.config import WORK_INTERVAL_MIN, WORK_INTERVAL_MAX
from backend.utils.ThreadSafeOrderedDict import ThreadSafeOrderedDict
from backend.db import dbhelper
from utils.err import easyExceptionHandler
# logging
belog = logging.getLogger("backend.worker")
belog.setLevel(level=logging.INFO)
# queue
queue = ThreadSafeOrderedDict()
def task_processor():
t = queue.popitem(last=False)
if not t: # no any task in queue
belog.info("No task in queue")
return
aid = t[1]["aid"]
type = t[0].split("-")[0]
belog.info("Task %s(target_aid=%d)"%(type, aid))
if type == "upload": # upload
msg, err = processor.upload(aid)
elif type == "delete":
#code = t[1]["code"]
#msg, err = processor.remove(code)
msg, err = processor.remove(aid)
else:
msg, err = "Invalid task type %s"%type, 1
if err:
belog.error("Task failed: %s"%msg)
elif type == "upload":
dberr = dbhelper.solo_article_inserter(aid=aid, igid=msg)
if dberr:
belog.error("Task %s(target_aid=%d): Set igid failed"%(type, aid))
elif type == "delete":
# delete from db
dberr = dbhelper.solo_article_remover(aid=aid)
if dberr:
belog.error("Task %s(target_aid=%d): remove igid record failed"%(type, aid))
belog.info("Task Done")
return
def main():
belog.info("Backend is starting...")
while True:
try:
task_processor()
except Exception as e:
easyExceptionHandler(e)
sleep = random.randint(WORK_INTERVAL_MIN, WORK_INTERVAL_MAX)
belog.info("Next round after %ds"%sleep)
time.sleep(sleep)