猿问

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

我正在使用 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

所以我猜这个实现在某处使用了锁。此问题的解决方法是什么?


qq_遁去的一_1
浏览 362回答 1
1回答

小唯快跑啊

在带有分叉的 Unix-y 操作系统上,您不会遇到此问题,但对于 Windows 来说,它看起来像是一种廉价的解决方法,可以延迟 redis 实例化,直到run在新进程中被调用:from multiprocessing import Processimport redisclass 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 stuffif __name__ == '__main__':    w = Worker()    w.start()    w.join()
随时随地看视频慕课网APP

相关分类

Python
我要回答