是否可以在不冻结gui的情况下在qt应用程序中运行,比如说sklearn gird search,它使用多个并行作业(n_jobs > 1
)?问题在于,用于并行化sklearn代码的joblib无法将多进程运行到线程中。
例如,我正在使用Gridsearch来找到svr的最佳参数,这是相当计算密集的。
这个问题已经问了好几次了,但是没有找到解决方法:
pyqt5-run-sklearn-calculations-on-a-separate-qthread,建议使用QProcess
吗?
multiprocessing-backed-parallel-loops-cannot-be-nested-below-threads,问题has been fixed后,threading.current_thread().name = 'MainThread'
解决方法不起作用
joblib-parallel-uses-only-one-core-if-started-from-qthread,使用multiprocessing.Pool(processes=4)
重写任务。此方法不适用于gridsearch嵌入njobs。
use sklearn cross validation train, in PyQt button,不要犹豫...
为什么不为此目的 提供任何见解(feature)?看起来它会很有用吗?
答案 0 :(得分:0)
根据我对问题的了解,问题出在joblib
使用的默认后端,即loky
。
在深入研究joblib和sklearn文档之后,我通过将joblib
后端切换为threading
解决了我的问题。请注意,对register_parallel_backend
的调用位于__init__
函数之外。
from sklearn.utils import parallel_backend, register_parallel_backend
from joblib._parallel_backends import ThreadingBackend
class ModelTrainer(QRunnable):
register_parallel_backend('threading', ThreadingBackend, make_default=True)
def __init__(self, **kwargs):