[scikit-learn] Estimator.predict() thread safety

Sebastian Raschka mail at sebastianraschka.com
Fri Jun 17 11:13:16 EDT 2016


That’s interesting. I believe n_jobs just wraps multiprocessing through joblib. So, setting it to -1 can essentially spawn as many processes as you have processors available, which may come with an undesired overhead in your environment? I am not sure if this is (still) and issue, but maybe have a look at this one here:
https://twiki.cern.ch/twiki/bin/view/Main/PythonLoggingThreadingMultiprocessingIntermixedStudy

> Mixing Python modules multiprocessing and threading along with logging error/debug messages with module logging is a very bad idea which leads to unexpected process stalling. Indeed, having concurrent entities based on both multiprocessing.Process and threading.Thread within a single application causes right the multiprocessing.Process to stall and never the threading.Thread, as the attached examples demonstrate. The problematic behaviour demonstrates:

Best,
Sebastian

> On Jun 17, 2016, at 11:01 AM, Philip Tully <tully at csc.kth.se> wrote:
> 
> Hi all,
> 
> I notice when I train a model and expose the predict function through a web API, predict takes longer to run in a multi-threaded environment than a single-threaded one. I'm guessing the root cause has something to do with thread collisions but I must be doing something incorrectly within the code (I set n_jobs=-1 for both FeatureUnion and estimators/gridsearchers there)
> 
> has someone else ran into a similar issue? I can provide more details if this Q is rather opaque still
> 
> best,
> Philip
> _______________________________________________
> scikit-learn mailing list
> scikit-learn at python.org
> https://mail.python.org/mailman/listinfo/scikit-learn



More information about the scikit-learn mailing list