在我的 svm 预测模型的实现中,我想让一个函数的执行成为svmutil.svm_train
多线程的。虽然我是多线程程序实现的新手,但我对并行编程概念有一些了解,并且我相信同时训练具有不同参数集的多个模型在理论上是可能的。
设置:
import svmutil
import multiprocessing as mp
problem = svm_util.svm_read_problem('my_problem')
# I have a list of svm_param objects I want to train
params = myCode.svm_param_list()
# Calculate the number of worker threads
processes = mp.cpu_count() * 2
将训练拆分为多个执行线程:
pool = mp.Pool(processes)
for param in params:
pool.apply(svmutil.svm_train, args=(problem, param,))
pool.close()
pool.join()
但是,我遇到的问题是svmutil.svm_train
不能腌制,因为它包含一个 c 类型的指针。python解释器给了我错误:
ValueError: ctypes objects containing pointers cannot be pickled
我宁愿调整我的实现,也不愿以某种方式腌制模块中的功能。因此,我想知道,有没有什么方法可以在不腌制的情况下并行化这个函数?
另外,我怎样才能收集函数的结果?理想情况下,这将是经过训练的模型的列表(svmutil.svm_train
每次调用函数时函数的输出)。