`mp.pool.ThreadPool` завершается ошибкой, когда` mp.pool` работает нормально - PullRequest
0 голосов
/ 07 сентября 2018

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

Когда я выполняю эту функцию, используя mp.pool.map(), все идет гладко. Однако, если я заменю его на mp.pool.ThreadPool.map(), произойдет сбой с этой ошибкой:

AssertionError: Number of manager items must equal union of block items # manager items: 15, # tot_items: 20.

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

EDIT : Код выглядит так (python 2.7):

import multiprocessing as mp
import pandas as pd (version 0.22.0)

def main_functionality(df, params):
    df = df[params['feature']]
    #Run 5-fold cross-validation
        data_df = pd.DataFrame(....)
        pred_df = pred_df.append(data_df)
    return statistics from pred_df

def a_function(df_init, feature, params_init):

    params = dict(params_init)
    df = df_init.copy()

    params['feature'] = feature
    try:
        results = main_functionality(df, params)
    except:
        results = (0,0,0)

    return results

def b_function(df, features):
    pool = mp.pool.ThreadPool(4)
    params = {...}
    results = pool.map(a_function,(df, feature, params) for f in features))

    results_df = pd.DataFrame(results)
    results_df.to_csv(...)

if __name__ == '__main__':
    df = read.csv(...) # A big CSV file (i.e. few GBs)
    features = [i for i in df.columns if i ....]

    b_function(df, features)
...