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