'TypeError ("не может сериализовать" _io.BufferedReader "объект")' - PullRequest
0 голосов
/ 22 июня 2019

Мой код работал нормально, но когда я перезапустил свою систему и снова запустил ее, она выдает эту ошибку. Я не мог понять причину этого поведения. Я искал другой вопрос с похожей ошибкой, но их проблема связана с любым пакетом, связанным с веб-сервисом, который в моем случае недопустим.

Traceback (most recent call last):
  File "cli.py", line 76, in <module>
    k=cli_obj.extract_resume_data()
  File "cli.py", line 29, in extract_resume_data
    return self.__extract_from_directory(args.directory)
  File "cli.py", line 52, in __extract_from_directory
    results = pool.map(resume_result_wrapper, resumes)
  File "/anaconda3/envs/nlp/lib/python3.7/multiprocessing/pool.py", line 268, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "/anaconda3/envs/nlp/lib/python3.7/multiprocessing/pool.py", line 657, in get
    raise self._value
multiprocessing.pool.MaybeEncodingError: Error sending result: '<multiprocessing.pool.ExceptionWithTraceback object at 0x7f80bed62eb8>'. Reason: 'TypeError("cannot serialize '_io.BufferedReader' object")'

Мой код выглядит так:

import os
import argparse
from resume_parser.resume_parser import ResumeParser
import multiprocessing as mp
from urllib.request import Request, urlopen
import io
import json
def print_cyan(text):
    print("\033[96m {}\033[00m" .format(text))

class ResumeParserCli(object):
    def __init__(self):     
        self.__parser = argparse.ArgumentParser()
        self.__parser.add_argument('-d', '--directory', help="directory containing all the resumes to be extracted")
        return

    def extract_resume_data(self):
        args = self.__parser.parse_args()

        if args.directory and not args.file:
            return self.__extract_from_directory(args.directory)
        else:
            return 'Invalid option. Please provide a valid option.'

    def __extract_from_file(self, file):
        if os.path.exists(file):
            # print_cyan('Extracting data from: {}'.format(file))
            resume_parser = ResumeParser(file)
            return [resume_parser.get_extracted_data()]
        else:
            return 'File not found. Please provide a valid file name.'

    def __extract_from_directory(self, directory):
        if os.path.exists(directory):
            pool = mp.Pool(mp.cpu_count())

            resumes = []
            data = []
            for root, directories, filenames in os.walk(directory):
                for filename in filenames:
                    file = os.path.join(root, filename)
                    resumes.append(file)

            results = pool.map(resume_result_wrapper, resumes)
            pool.close()
            pool.join()

            return results
        else:
            return 'Directory not found. Please provide a valid directory.'

def resume_result_wrapper(resume):
    # print_cyan('Extracting data from: {}'.format(resume))
    parser = ResumeParser(resume)
    return parser.get_extracted_data()

if __name__ == '__main__':
    cli_obj = ResumeParserCli()
    k=cli_obj.extract_resume_data()

Пожалуйста, помогите мне. Заранее спасибо

...