mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-06 08:07:49 +00:00
42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
"""Background worker: drains a queue of jobs."""
|
|
|
|
import argparse
|
|
import logging
|
|
import time
|
|
from collections import deque
|
|
|
|
log = logging.getLogger("worker")
|
|
|
|
|
|
def process(job: dict) -> str:
|
|
kind = job.get("kind")
|
|
if kind == "email":
|
|
return f"sent email to {job['to']}"
|
|
if kind == "report":
|
|
return f"built report {job['name']}"
|
|
raise ValueError(f"unknown job kind: {kind!r}")
|
|
|
|
|
|
def run(queue: deque, once: bool = False) -> int:
|
|
done = 0
|
|
while queue:
|
|
job = queue.popleft()
|
|
try:
|
|
log.info(process(job))
|
|
done += 1
|
|
except ValueError as e: # TODO: dead-letter queue
|
|
log.warning("skipping job: %s", e)
|
|
if once:
|
|
break
|
|
time.sleep(0.01)
|
|
return done
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--once", action="store_true")
|
|
args = parser.parse_args()
|
|
logging.basicConfig(level=logging.INFO)
|
|
jobs = deque([{"kind": "email", "to": "dev@example.com"}, {"kind": "report", "name": "weekly"}, {"kind": "?"}])
|
|
print(f"processed {run(jobs, args.once)} job(s)")
|