Параллельное вычисление Python без травления

James Ko спросил: 03 февраля 2018 в 10:54 в: python

У меня очень простое понимание списка, которое я хотел бы распараллеливать:

nlp = spacy.load(model)
texts = sorted(X['text'])
# TODO: Parallelize
docs = [nlp(text) for text in texts]

Однако, когда я пытаюсь использовать Pool из multiprocessing следующим образом:

docs = Pool().map(nlp, texts)

Это дает мне следующую ошибку:

Traceback (most recent call last):
  File "main.py", line 117, in <module>
    main()
  File "main.py", line 99, in main
    docs = parse_docs(X)
  File "main.py", line 81, in parse_docs
    docs = Pool().map(nlp, texts)
  File "C:\Users\james\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 260, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "C:\Users\james\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 608, in get
    raise self._value
  File "C:\Users\james\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 385, in _handle_tasks
    put(task)
  File "C:\Users\james\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "C:\Users\james\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\reduction.py", line 51, in dumps
    cls(buf, protocol).dump(obj)
AttributeError: Can't pickle local object 'FeatureExtracter.<locals>.feature_extracter_fwd'

Можно ли выполнить это параллельное вычисление без чтобы сделать объекты разборчивыми? Я открыт для примеров, связанных с сторонними библиотеками, такими как joblib и т. Д.

edit: Я также пробовал

docs = Pool().map(nlp.__call__, texts)

, и это тоже не сработало.

0 ответов