Многопроцессорные параллельные циклы с поддержкой не могут быть вложены в потоки
В чем причина такой проблемы в joblib? "Многопроцессорные параллельные циклы с резервной копией не могут быть вложены в потоки, устанавливая n_jobs=1". Что я должен сделать, чтобы избежать такой проблемы?
На самом деле мне нужно реализовать сервер XMLRPC, который выполняет тяжелые вычисления в фоновом потоке и сообщает о текущем прогрессе через опрос от клиента UI. Он использует scikit-learn, которые основаны на joblib.
PS: я просто изменил имя потока на "MainThread", чтобы избежать такого предупреждения, и все выглядит хорошо (работает параллельно, как и ожидалось, без проблем). Что может быть проблемой в будущем для такого обходного пути?
2 ответа
У меня было то же предупреждение, когда я делал прогнозы со sklearn в потоке, используя загруженную модель, которая была оснащена n_jobs > 1. Она появляется, когда вы выбираете модель, она сохраняется с ее параметрами, включая n_jobs.
Чтобы избежать предупреждения (и потенциальной стоимости сериализации), установите n_jobs равным 1 при выборе моделей:
clf = joblib.load (имя_файла_файла).set_params (n_jobs = 1)
Похоже, это связано с этой проблемой в библиотеке JobLib. На момент написания статьи это, похоже, исправлено, но еще не выпущено. Как написано в вопросе, грязное исправление могло бы переименовать основной поток обратно в MainThread
:
threading.current_thread().name = 'MainThread'