Невозможно выбрать экземпляр Redis-Py (_thread.lock) - PullRequest
0 голосов
/ 12 сентября 2018

Я использую клиентскую реализацию 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

Так что я предполагаю, что эта реализация где-то использует блокировку,Как обойти эту проблему?

1 Ответ

0 голосов
/ 12 сентября 2018

У вас не будет этой проблемы в 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()
...