Python concurrent.futures.ProcessPoolExecutor не работает - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время я использую concurrent.futures.ProcessPoolExecutor в методе класса следующим образом

import pylogit

def parallel_fitting(index):
    X = index[0]
    model_spec = index[1]
    zeros = index[2]
    model = pylogit.create_choice_model(data = data,alt_id_col = 'U_ID',
                                  obs_id_col = 'INDEX',choice_col = 'RES',
                                  specification = model_spec,model_type="MNL")

    model.fit_mle(zeros)

    return model

class something(): 

    def hyper_selection(self, X_y):
        #Create specification dictionary
        model_specification = OrderedDict()
        for variable in X.columns[2:]:
            model_specification[variable] = 'all_same'
        zeros = np.zeros(len(model_specification))

        with concurrent.futures.ProcessPoolExecutor(max_workers=8) as executor:
            for _ in range(2):
                executor.submit(parallel_fitting, [X_y, model_specification, zeros]))

Функция parallel_fitting работает хорошо последовательно, однако, когда она помещается в ProcessPoolExecutor, программа продолжает работать и никогда не завершается. точка сбоя находится на линии fit_mle, так как без нее программа работает нормально.

Я подозреваю, что пул повторно импортирует модули, что приводит к созданию другого ProcessPoolExecutor Я запускаю его на OSX, поэтому невозможно использовать fork(), есть ли способ обойти это.

...