我正在使用 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()
添加回答
举报
0/150
提交
取消