我正在使用带有烧瓶的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()
如何纠正?
答案 0 :(得分:1)
我通过将Python 3.8降级到Python 3.7解决了类似的问题
我的情况有些不同。我正在运行Django服务器,该服务器使用Django-Q计划任务。但是,Django-Q基于RQ,错误
TypeError:无法腌制“ _thread.lock”对象
是由Python的Multiprocessing模块抛出的,所以我相信解决方案会翻译。
从2020年5月开始,我希望这是一个错误,尽管目前尚不清楚是什么原因造成的。