64 lines
No EOL
1.8 KiB
Python
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) |