Синхронизировать ProcessPoolExecutor - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь запустить некоторые очень большие данные временных рядов, используя concurrent.futures.ProcessPoolExecutor (). Набор данных содержит несколько временных рядов (которые являются независимыми). Весь набор данных доступен в списке кортежей data, которые я передаю через вспомогательную функцию следующим образом:

def help_func(daa):
    large_function(daa[0], daa[1], daa[2])

with concurrent.futures.ProcessPoolExecutor() as executor:
    executor.map(help_func, data, chunksize=1)

Теперь, хотя различные временные ряды, содержащиеся в данных, являются независимыми по столбцам, из-за характера данных временных рядов значения внутри временного ряда необходимо обрабатывать одно за другим. Упорядочив переменную data в терминах разных временных рядов, я уверен, что карта всегда будет выполнять вызовы последовательно во времени.

С executor.map Я не могу найти способ привязать определенный временной ряд к одному и тому же ядру всегда или каким-то образом поделиться состоянием из предыдущих попыток с процессом, работающим на новом ядре.

При текущей настройке всякий раз, когда обработка для новой временной метки вызывается на новом ядре, она начинается с шага инициализации.

Есть ли элегантное решение этой проблемы?

...