Python concurrent.futures.ProcessPoolExecutor не работает

В настоящее время я использую 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(), есть ли способ обойти его.


person Ivan To    schedule 30.03.2020    source источник
comment
Надеюсь, вы не выполняете этот код в блокноте jupyter   -  person Chayan Bansal    schedule 30.03.2020
comment
это на IDE Spyder   -  person Ivan To    schedule 30.03.2020
comment
Посмотрите здесь: stackoverflow.com/questions/52763746/   -  person Chayan Bansal    schedule 30.03.2020