Я разработал скрипт Python, который в основном читает файл excel и обучает модель с помощью sklearns GridSearchCV, используя оператор n_jobs
:
def create_table():
my_model = GridSearchCV(GradientBoostingRegressor(), tuned_parameters, cv=5, scoring='neg_mean_absolute_error', n_jobs=7)
my_model.fit(x_data, y_data)
return(my_model.predict(new_x_data))
Это отлично работает при его выполнении. Но теперь я пытаюсь выполнить его одним нажатием кнопки в приложении Dash.
Multiprocessing backed parallel loops cannot be nested below threads, setting n_jobs=1
Мое приложение Dash выглядит так:
def generate_html_table(dataframe, max_rows=50):
return html.Table(
# Header
[html.Tr([html.Th(col) for col in dataframe.columns])] +
# Body
[html.Tr( [html.Td(dataframe.index[i])] + [html.Td(dataframe.iloc[i][col]) for col in dataframe.columns]) for i in range(min(len(dataframe), max_rows))]
)
app = dash.Dash()
app.layout = html.Div([
html.H1(children='Region Forecast',
style={'textAlign': 'center'} ),
html.Button(id='submit-button', n_clicks=0, children='Submit',
style={ 'margin': 'auto',
'display': 'block' }),
html.Table(id='output-table', children = generate_html_table(pd.DataFrame()))
])
@app.callback(Output('output-table', 'children'),
[Input('submit-button', 'n_clicks')])
def reactive_compute(n_clicks):
print('inside reactive compute')
my_table = create_my_table()
return(generate_html_table(my_table))
if __name__ == '__main__':
app.run_server(debug=True)
Я видел этот вопрос, но он мне не помогает, потому что я сам не обрабатываю многопроцессорность (это функция scikitlearn): Многопроцессорные параллельные циклы не могут быть вложены ниже потоков
Приложение должно работать только локально, я не планирую размещать его на веб-сервере.
Могу ли я сохранить подгонку параллельной модели из приложения Dash, и если это возможно, как лучше всего к этому подойти?