类型错误:无法使用 RQ 腌制“_thread.lock”对象

Hap*_*der 7 python queue flask

我正在使用带有烧瓶的 RQ 在循环中排队作业。我有以下代码:

from rq import Queue
from rq.job import Job
from worker import conn

q = Queue(connection=conn)

for i in range(5):
    job = q.enqueue_call(
    func=process_data, args=(i, data,))
    print(job.get_id()) 
Run Code Online (Sandbox Code Playgroud)

现在我收到错误:

TypeError: cannot pickle '_thread.lock' object
Run Code Online (Sandbox Code Playgroud)

我有以下代码的工人:

import os

import redis
from rq import Worker, Queue, Connection

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()
Run Code Online (Sandbox Code Playgroud)

如何纠正?

小智 3

我通过从 Python 3.8 降级到 Python 3.7 解决了类似的问题

我的情况有点不同。我正在运行 Django 服务器,它使用 Django-Q 安排任务。然而Django-Q是基于RQ的,错误

类型错误:无法腌制“_thread.lock”对象

是由Python的多处理模块抛出的,所以我相信解决方案会翻译。

截至 2020 年 5 月,我预计这是一个错误,尽管尚不清楚是什么原因造成的。