我正在使用带有 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())
现在我收到错误:
TypeError: cannot pickle '_thread.lock' object
我有以下代码的 worker :
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()
如何纠正?
最佳答案
我通过从 Python 3.8 降级到 Python 3.7 解决了类似的问题
我的情况有点不同。我正在运行一个 Django 服务器,它使用 Django-Q 安排任务。但是Django-Q是基于RQ的,报错
TypeError: cannot pickle '_thread.lock' object
由 Python 的 Multiprocessing 模块抛出,所以我相信解决方案会翻译。
截至 2020 年 5 月,我预计这是一个错误,尽管尚不清楚是什么原因造成的。
关于python - 类型错误 : cannot pickle '_thread.lock' object with RQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60735003/