Python ValueError:未知类型<;类别';redis.client.StrictPipeline'&燃气轮机;

Python ValueError:未知类型<;类别';redis.client.StrictPipeline'&燃气轮机;,python,flask,redis,python-rq,Python,Flask,Redis,Python Rq,我在win10上进行了本地开发,这是使用RQ任务队列的一个问题,RQ任务队列只在linux系统上工作,因为它需要分叉进程的能力。我正在尝试扩展可以使用RQ的flask base项目。我偶然发现。我喜欢这种回购的想法(如果我能让它工作起来,它将真正简化我的生活,因为我是在win 10-64上开发的): 安装此库之后 我可以通过运行以下操作在我的视图中对作业进行排队: @login_required @main.route('/selected') def select

我在win10上进行了本地开发,这是使用RQ任务队列的一个问题,RQ任务队列只在linux系统上工作,因为它需要分叉进程的能力。我正在尝试扩展可以使用RQ的flask base项目。我偶然发现。我喜欢这种回购的想法(如果我能让它工作起来,它将真正简化我的生活,因为我是在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()
这将正确返回作业代码

我将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'>
$python-u manage.py运行\u worker
09:40:44
09:40:44***正在收听?[32M默认值?[39;49;00米…”。。。
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:不推荐使用警告:job.status已不推荐使用。请改用job.set_status()
弃用警告
09:40:58?[31M值错误:未知类型?[39;49;00m
回溯(最近一次呼叫最后一次):
文件“…\lib\site packages\rq\u win\worker.py”,第87行,在执行作业中
queue.enqueue_依赖项(作业,管道=管道)
文件“…\lib\site packages\rq\queue.py”,第322行,在队列依赖项中
对于pipe.smembers中的作业\u id(依赖项\u键)]
文件“…\lib\site packages\rq\queue.py”,第322行,在
对于pipe.smembers中的作业\u id(依赖项\u键)]
文件“…\lib\site packages\rq\compat\\ uuuuuu init\ uuuuuuu.py”,第62行,格式为文本
raise VALUERROR('未知类型%r'%type(v))
ValueError:未知类型

总之,我认为作业在redis中已正确排队。但是,当工作进程尝试从队列中抓取作业进行处理时,会发生此错误。我如何解决此问题?

因此,经过一些挖掘后,错误的根源似乎是,
作业id
以文本形式发送到
函数中噢,是一个
stricpipline
对象。但是,我无法在本地复制错误;您可以发布更多的代码吗?此外,我会尝试重新安装redis、rq和rq win模块,并可能尝试导入
rq.compat

。在windows上开发时,您可以在docker容器中使用linux运行它。这将使让事情变得容易些。你想看什么?