Проблема с использованием блокировки с многопроцессорной обработкой. Бассейн: ошибка травления

Я создаю модуль Python для извлечения тегов из большого массива текста, и, хотя его результаты высокого качества, он выполняется очень медленно. Я'Я пытался ускорить процесс, используя многопроцессорность, и это тоже работало, пока я не попытался ввести блокировку, чтобы к нашей базе данных одновременно подключался только один процесс. Я могу'Я не могу понять, как сделать эту работу - несмотря на долгие поиски и настройки, я все еще получаюPicklingError: Can't pickle : attribute lookup thread.lock failed, Вот's оскорбительный код - он работал нормально, пока я не попытался передать объект блокировки в качестве аргумента.f

def make_network(initial_tag, max_tags = 2, max_iter = 3):
    manager = Manager()
    lock = manager.Lock()
    pool = manager.Pool(8)

    # this is a very expensive function that I would like to parallelize 
    # over a list of tags. It involves a (relatively cheap) call to an external
    # database, which needs a lock to avoid simultaneous queries. It takes a list
    # of strings (tags) as its sole argument, and returns a list of sets with entries
    # corresponding to the input list.
    f = partial(get_more_tags, max_tags = max_tags, lock = lock) 

    def _recursively_find_more_tags(tags, level):
        if level >= max_iter:
            raise StopIteration
        new_tags = pool.map(f, tags)
        to_search = []
        for i, s in zip(tags, new_tags):
            for t in s:
                joined = ' '.join(t)
                print i + "|" + joined
                to_search.append(joined)
        try:
            return _recursively_find_more_tags(to_search, level+1)
        except StopIteration:
            return None

    _recursively_find_more_tags([initial_tag], 0)

Ответы на вопрос(1)

Ваш ответ на вопрос