TypeError:无法使用RQ腌制'_thread.lock'对象

时间:2020-03-18 07:20:49

标签: python flask queue

我正在使用带有烧瓶的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()) 

现在我得到了错误:

TypeError: cannot pickle '_thread.lock' object

我的工人的代码如下:

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()

如何纠正?

1 个答案:

答案 0 :(得分:1)

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

我的情况有些不同。我正在运行Django服务器,该服务器使用Django-Q计划任务。但是,Django-Q基于RQ,错误

TypeError:无法腌制“ _thread.lock”对象

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

从2020年5月开始,我希望这是一个错误,尽管目前尚不清楚是什么原因造成的。