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

无法pickle redis-py 实例(_thread.lock)

无法pickle redis-py 实例(_thread.lock)

qq_遁去的一_1 2021-06-04 14:13:43
我正在使用 Redis 的客户端 python 实现(事实上的标准):https : //pypi.org/project/redis/所以我在后台定义了多个worker,每个worker都有一个在启动时创建的连接实例:class Worker(Process):    _db = None    def __init__(self):        super(Worker, self).__init__()        self._db = redis.Redis(host="1.2.3.4", port=1234, db=0)但是,每当我尝试启动此工作者的实例时,都会收到以下错误消息:TypeError: can't pickle _thread.lock objects所以我猜这个实现在某处使用了锁。此问题的解决方法是什么?
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

在带有分叉的 Unix-y 操作系统上,您不会遇到此问题,但对于 Windows 来说,它看起来像是一种廉价的解决方法,可以延迟 redis 实例化,直到run在新进程中被调用:


from multiprocessing import Process

import redis


class Worker(Process):

    _db = None

    def __init__(self):

        super().__init__()

        self._db = None

    def run(self):

        self._db = redis.Redis(host='localhost', port=6379, db=0)

        # do stuff


if __name__ == '__main__':

    w = Worker()

    w.start()

    w.join()


查看完整回答
反对 回复 2021-06-16
  • 1 回答
  • 0 关注
  • 315 浏览
慕课专栏
更多

添加回答

举报

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