为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2022-09-06 16:31:18
我正在使用带有烧瓶的RQ在循环中排队作业。我有以下代码:from rq import Queuefrom rq.job import Jobfrom worker import connq = 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 osimport redisfrom rq import Worker, Queue, Connectionlisten = ['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()如何纠正这种情况?
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

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

我的情况有点不同。我正在运行一个Django服务器,它使用Django-Q调度任务。但是,Django-Q基于RQ,并且错误

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

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

截至2020年5月,我预计这是一个错误,尽管目前尚不清楚导致它的原因。


查看完整回答
反对 回复 2022-09-06
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

TypeError: cannot pickle '_thread.lock' object

此错误主要源于您尝试使用 pickle 序列化不可序列化的对象。您可以通过为 Redis() 创建一个对象来检查相同的内容,并尝试执行以下操作:


import pickle

r = Redis()

pickle.dumps(r)

它会给你同样的错误。此外,对于当前方案。这可能来自


q = Queue(connection=conn)

因为,您正在尝试导入连接连接。你可以定义这样的东西::


q = Queue(connection=Redis())

r = Redis(host='localhost', port=6379, db=0)


查看完整回答
反对 回复 2022-09-06
  • 2 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信