multiprocessing.pool.MaybeEncodingError: Ошибка при отправке результатов - PullRequest
0 голосов
/ 19 сентября 2019

Сомони, пожалуйста, объясните следующую ошибку?

multiprocessing.pool.MaybeEncodingError: Ошибка при отправке результата: '[>]'.
Причина: 'NotImplementedError ("[E112] Pickling aspan не поддерживается, потому что span являются только представлениями родительского документа и не могут существовать сами по себе. У маринованного диапазона всегда должны быть свои Doc и Vocab, что практически не имеет недостатка по сравнению с непосредственным выбором родительского документа. Поэтому вместовыбрать диапазон, выбрать документ, к которому он принадлежит, или использовать Span.as_doc для преобразования диапазона в отдельный объект документа. ") '

Ниже приведен мой код:

resume_parser2.py

class Resume_parser2(object):
    inputString = ''
    skill = ['Java']
    def __init__(self, resume):
        self.__matcher = Matcher(nlp.vocab)
        self.__skills = {
            'skills'    : None
        }
        self.__text        = utils.extract_text(self.__resume, os.path.splitext(self.__resume)[1])
        self.__text        = ' '.join(self.__text.split())
        self.__nlp         = nlp(self.__text)
        self.__noun_chunks = list(self.__nlp.noun_chunks)


    def __get_basic_details(self):
        skills = utils.extract_skills(self.__nlp,self.__noun_chunks)
        self.__skills['skills'] = skills
        return

    def check_skills(self):
        skill = ['Java']
        if skill in self.__skills:
            return self.__skills

def filtered_resume(resume):
    parser = Resume_parser2(resume)
    return parser.check_skills

if __name__ == '__main__':
    pool = mp.Pool(mp.cpu_count())
    resumes = []
    data = []
    for root, directories, filenames in os.walk('resumes'):
        for filename in filenames:
            file = os.path.join(root, filename)
            resumes.append(file)

    results = [pool.apply_async(filtered_resume, args=(x,)) for x in resumes]
    results = [p.get() for p in results]

utils.extract_text - это функция, определенная для извлечения текста из файлов, а utils.extract_skills извлекает набор навыков из файлов.Оба они извлекают данные.

Api.py

from resume_parser2 import Resume_parser2
from flask import Flask, request, redirect, url_for,send_from_directory, jsonify
from werkzeug.utils import secure_filename
import json
import multiprocessing as mp
import pandas as pd
import os

direct = 'E:/parsertool/backupresumes'

app = Flask(__name__)

def print_cyan(text):
    print("\033[96m {}\033[00m" .format(text))

def extract_from_directory(directory):
    if os.path.exists(directory):
        pool = mp.Pool(mp.cpu_count())
        resumes = []            
        for root, directories, filenames in os.walk(directory):
            for filename in filenames:
                extension = os.path.splitext(filename)[1]
                if (extension == '.pdf' or extension == '.docx'):
                    file = os.path.join(root, filename)
                    resumes.append(file)
        results = pool.map(filtered_resume, resumes)
        pool.close()
        pool.join()
        return results
    else:
        return 'Directory not found.'


def filtered_resume(resume):
    parser = Resume_parser2(resume)
    return parser.check_skills


@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        #files = request.files.getlist('files')
        #folder = dirname(files[0].filename)
        #print(folder)
        return jsonify(extract_from_directory(direct))


if __name__ == '__main__':
    app.run(debug=True)

Здесь я не могу понять ошибку.Может кто-нибудь объяснить, что это за ошибка или как ее устранить?

...