Redis RQ Python - jobs not registering

Viewed 336

I need your help on figuring out how to get RQ working with Flask. I have a simple Flask page with a bunch of links to trigger scripts which are / should enter RQ. It seems that only one "run_db_script" (see - tasks_combined.py) of them is registering and showing up in running jobs. Others will run too but not registering. Also i'm a little confused on how to pull job status, should I use "rq.job" or "rq.registry"?

Thanks for looking

worker.py:

import os
import sys
import redis
from rq import Worker, Queue, Connection

sys.path.insert(0, "/some_path/")

listen = ["default"]

redis_url = os.getenv("REDISTOGO_URL", "redis://localhost:6379")

conn = redis.from_url(redis_url)

if __name__ == "__main__":
    with Connection(conn):
        worker = Worker(list(map(Queue, listen)))
        worker.work()

tasks.py:

    from rq import queue
    from rq.job import Job
    from rq.registry import StartedJobRegistry
    from app.worker import conn
    
    
    @tasks.route("/tasks", methods=["GET", "POST"])
    @login_required
    def run_task():
        q = Queue("default", connection=conn)
        workers = Worker.count(connection=conn)
        registry = StartedJobRegistry(queue=q)
        num_of_jobs_in_reg = registry.count
        list_of_jobs_in_reg = registry.get_job_ids()
        jobs = q.jobs
        q_len = len(q)
        title = "Manual Script Runner"
        try:
            if request.method == "POST":
                from app.scripts.tasks.combined_tasks import run_desired_task
                task_name = request.form.get("task")
                job = q.enqueue(run_desired_task, task_name, result_ttl=5000, job_timeout=300)
                return render_template(
                                        "script_pages/manual_scripts.html", 
                                        title=title, 
                                        job_id=job.get_id(), 
                                        job_status=job.get_status(),
                                        jobs=jobs,
                                        jobs_number=q_len,
                                        workers=workers,
                                        jobs_in_registry=num_of_jobs_in_reg,
                                        job_ids_in_registry=list_of_jobs_in_reg
                                        )
        except Exception as error:
            return render_template("pages/error_page.html", title="Error:" + str(error))

@tasks.route("/status/<job_key>", methods=["GET", "POST"])
def get_results(job_key):
    job = Job.fetch(job_key, connection=conn)
    if job.is_started:
        return jsonify(f"JOB ID: {job_key} is running, was started at: {job.started_at}"), 200
    if job.is_finished:
        return jsonify(f"JOB ID: {job_key} {job.result}"), 200
    else:
        return "None", 202

tasks_combined.py:

def run_desired_task(task):
    print(f"[+] Received job for {task}")
    if "run_db_script" in task:
        run_db_script()
    elif "initiate_cfg_backup" in task:
        initiate_cfg_backup()
    elif "initiate_reset" in task:
        initiate_reset()
0 Answers
Related