Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis RQ Python-作业未注册_Python_Flask_Redis_Python Rq - Fatal编程技术网

Redis RQ Python-作业未注册

Redis RQ Python-作业未注册,python,flask,redis,python-rq,Python,Flask,Redis,Python Rq,我需要你的帮助,弄清楚如何让RQ使用Flask。我有一个简单的Flask页面,其中有一系列链接,可以触发正在/应该进入RQ的脚本。似乎只有一个“run\u db\u脚本”(参见-tasks\u combined.py)在运行作业中注册和显示。其他人也将运行,但不注册。另外,我对如何获取作业状态有点困惑,我应该使用“rq.job”还是“rq.registry” 谢谢你的关注 worker.py: import os import sys import redis from rq import Wo

我需要你的帮助,弄清楚如何让RQ使用Flask。我有一个简单的Flask页面,其中有一系列链接,可以触发正在/应该进入RQ的脚本。似乎只有一个“run\u db\u脚本”(参见-tasks\u combined.py)在运行作业中注册和显示。其他人也将运行,但不注册。另外,我对如何获取作业状态有点困惑,我应该使用“rq.job”还是“rq.registry”

谢谢你的关注

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

你明白了吗?我也面临着同样的问题。哦,stick stick:(是的,它有一个很长的学习曲线:(
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()