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



我正在使用Redis的客户端python实现(事实上的标准(: https://pypi.org/project/redis/

所以我在后台定义多个工作线程,每个工作线程都有一个在启动时创建的连接实例:

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

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

在具有分叉的 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()

相关内容

  • 没有找到相关文章