Вопрос:

Многопроцессорная обработка Python TypeError: невозможно выбрать объекты генератора

python multithreading parallel-processing multiprocessing

2077 просмотра

2 ответа

43 Репутация автора

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

import multiprocessing as mp
from functools import partial
from numpy import array_split

def call_train(signals, args):
    return args[0].train(signals, args[1])

pool = mp.Pool()

chunks = array_split(data.train_signals, pool._processes)
res = pool.map(partial(call_train, [strat, data.train_md]), chunks)

В приведенном выше описании strat - это объект Python, а data.train_signals и data.train_md представляют собой панды данных.

Ошибка заключается в следующем:

File "/home/jason/PycharmProjects/backtester/core/backtester.py", line 51, in evaluate
res = pool.map(partial(call_train, [strat, data.train_md]), chunks)
File "/usr/lib/python3.5/multiprocessing/pool.py", line 260, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "/usr/lib/python3.5/multiprocessing/pool.py", line 608, in get
raise self._value
File "/usr/lib/python3.5/multiprocessing/pool.py", line 385, in _handle_tasks
put(task)
File "/usr/lib/python3.5/multiprocessing/connection.py", line 206, in send
self._send_bytes(ForkingPickler.dumps(obj))
File "/usr/lib/python3.5/multiprocessing/reduction.py", line 50, in dumps
cls(buf, protocol).dump(obj)
TypeError: can't pickle generator objects
Автор: Jason Clarkson Источник Размещён: 10.01.2018 10:51

Ответы (2)


-3 плюса

43 Репутация автора

Решение

Обновить:

Вложенные 3 объекта глубоко под моим stratклассом у меня был генератор, о котором я забыл.

Автор: Jason Clarkson Размещён: 10.01.2018 03:24

0 плюса

990 Репутация автора

Установите use_multiprocessing = False в fit_generator, это как-то позволяет обойти проблему.

Автор: Stepan Yakovenko Размещён: 08.05.2019 03:07
Вопросы из категории :
32x32