无法腌制 redis-py 实例 (_thread.lock)
Unable to pickle redis-py instance (_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)
但是,每当我尝试启动这个 worker 的实例时,我都会收到以下错误消息:
TypeError: can't pickle _thread.lock objects
所以我猜测此实现在某处使用了锁。此问题的解决方法是什么?
你不会在带有分叉的 Unix-y OS 上遇到这个问题,但对于 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()
我正在使用 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)
但是,每当我尝试启动这个 worker 的实例时,我都会收到以下错误消息:
TypeError: can't pickle _thread.lock objects
所以我猜测此实现在某处使用了锁。此问题的解决方法是什么?
你不会在带有分叉的 Unix-y OS 上遇到这个问题,但对于 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()