AttributeError: модуль 'concurrent' не имеет атрибута 'futures' при попытке параллельной обработки в python 3.6 - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь разделить процесс, который занимает много времени, на несколько процессов с помощью модуля concurrent.futures.Прикрепленный код ниже

Основная функция:

with concurrent.futures.ProcessPoolExecutor() as executor:
for idx, score in zip([idx for idx in range(dataframe.shape[0])],executor.map(get_max_fuzzy_score,[dataframe[idx:idx+1] for idx in range(dataframe.shape[0])])):
    print('processing '+str(idx+1)+' of '+str(dataframe.shape[0]+1))
    dataframe['max_row_score'].iloc[idx] = score

get_max_fuzzy_score функция:

def get_max_fuzzy_score(picklepath_or_list, df):
import numpy as np
extracted_text_columns = list(df.filter(regex='extracted_text').columns)
data_list = [df[data].iloc[0] for data in extracted_text_columns if not df[data].isnull().values.any()]
try:
    size = len(picklepath_or_list)
    section_snippet_list = picklepath_or_list
except:
    section_snippet_list = pickle.load(open(picklepath_or_list,'rb'))
scores = []
for section_snippet in section_snippet_list:
    for data in data_list:
        scores.append(fuzz.partial_ratio(data,section_snippet))
score = max(scores)

return score

Функция принимает значения нескольких столбцов и возвращает максимальную нечеткую оценку изсписок, который построен ранее.

Вот ошибка, которую я получаю:

Traceback (most recent call last): File "multiprocessing.py", line 8, in <module> import concurrent.futures File "/home/naveen/anaconda3/lib/python3.6/concurrent/futures/__init__.py", line 17, in <module> from concurrent.futures.process import ProcessPoolExecutor File "/home/naveen/anaconda3/lib/python3.6/concurrent/futures/process.py", line 53, in <module> import multiprocessing File "/home/naveen/Documents/pramata-ie/data-science/scripts/multiprocessing.py", line 79, in <module> with concurrent.futures.ProcessPoolExecutor() as executor: AttributeError: module 'concurrent' has no attribute 'futures'

Любая помощь по этому поводу была бы великолепна.Спасибо

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете импортировать его следующим образом:

import concurrent.futures

и использовать его следующим образом:

executor = concurrent.futures.ThreadPoolExecutor(max_workers=num_workers).


Вы также можете импортировать ThreadPoolExecutor следующим образом:

from concurrent.futures.thread import ThreadPoolExecutor

и использовать его следующим образом:

executor = ThreadPoolExecutor(max_workers=num_workers).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...