我在我的项目中使用django-rq。
我想要实现的目标: 我有第一个视图,加载模板,从网络摄像头获取图像并保存在我的电脑上。然后,视图调用第二个视图,其中使用rq将处理图像的异步任务排入队列。最后,在延迟20秒后,调用第三个视图。在后一种观点中,我想检索异步任务的结果。
问题:正确创建了作业对象,但队列始终为空,因此我无法使用queue.fetch_job(job_id)
。阅读here我设法在FinishedJobRegistry中找到了这份工作,但我无法访问它,因为注册表是不可迭代的。
from django_rq import job
import django_rq
from rq import Queue
from redis import Redis
from rq.registry import FinishedJobRegistry
redis_conn = Redis()
q = Queue('default',connection=redis_conn)
last_job_id = ''
def wait(request): #second view, starts the job
template = loader.get_template('pepper/wait.html')
job = q.enqueue(processImage)
print(q.is_empty()) # this is always True!
last_job_id = job.id # this is the expected job id
return HttpResponse(template.render({},request))
def ceremony(request): #third view, retrieves the result
template = loader.get_template('pepper/ceremony.html')
print(q.is_empty()) # True
registry = FinishedJobRegistry('default', connection=redis_conn)
finished_job_ids = registry.get_job_ids() #here I have the correct id (last_job_id)
return HttpResponse(template.render({},request))
问题:如何从完成的作业注册表中检索异步作业的结果?或者,更好的是,我怎样才能正确排队?
答案 0 :(得分:0)
我找到了另一种方法:我只是使用我在视图中修改的全局工作列表。无论如何,我想知道正确的方法......