我在win10上本地开发,这是使用RQ任务队列的一个问题,它只适用于Linux系统,因为它需要能够分叉进程。我试图扩展可以使用RQ的基于烧瓶的项目https://github.com/hack4impact/flask-base/tree/master/app。我遇到了https://github.com/michaelbrooks/rq-win。我喜欢这个回购的想法(如果我可以让它工作,它将真正简化我的生活,因为我在10 -64胜利上发展):
安装此库后
我可以通过运行以下内容在我的视图中排队:
@login_required
@main.route('/selected')
def selected():
messages = 'abcde'
j = get_queue().enqueue(render_png, messages, result_ttl=5000)
return j.get_id()
这会正确返回job_code。
我将manage.py中的代码更改为:
from rq_win import WindowsWorker
@manager.command
def run_worker():
"""Initializes a slim rq task queue."""
listen = ['default']
REDIS_URL = 'redis://localhost:6379'
conn = Redis.from_url(REDIS_URL)
with Connection(conn):
# worker = Worker(map(Queue, listen))
worker = WindowsWorker(map(Queue, listen))
worker.work()
当我尝试使用以下命令运行时:
$ python -u manage.py run_worker
09:40:44
09:40:44 *** Listening on ?[32mdefault?[39;49;00m...
09:40:58 ?[32mdefault?[39;49;00m: ?[34mapp.main.views.render_png('{"abcde"}')?[39;49;00m (8c1b6186-39a5-4daf-9c45-f60e4241cd1f)
...\lib\site-packages\rq\job.py:161: DeprecationWarning: job.status is deprecated. Use job.set_status() instead
DeprecationWarning
09:40:58 ?[31mValueError: Unknown type <class 'redis.client.StrictPipeline'>?[39;49;00m
Traceback (most recent call last):
File "...\lib\site-packages\rq_win\worker.py", line 87, in perform_job
queue.enqueue_dependents(job, pipeline=pipeline)
File "...\lib\site-packages\rq\queue.py", line 322, in enqueue_dependents
for job_id in pipe.smembers(dependents_key)]
File "...\lib\site-packages\rq\queue.py", line 322, in <listcomp>
for job_id in pipe.smembers(dependents_key)]
File "...\lib\site-packages\rq\compat\__init__.py", line 62, in as_text
raise ValueError('Unknown type %r' % type(v))
ValueError: Unknown type <class 'redis.client.StrictPipeline'>
总而言之,我认为这些工作正在redis中正确排队。但是,当工作进程尝试从队列中获取作业以进行处理时,会发生此错误。我该如何解决这个问题?
答案 0 :(得分:3)
所以经过一些挖掘后,看起来错误的根源是here,其中job_id
被发送到as_text
函数的某种方式是StrictPipeline
对象。但是,我无法在本地复制错误;你可以发布更多的代码吗?另外,我会尝试重新安装redis,rq和rq-win模块,并可能尝试导入rq.compat