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)