1
在我的svm预测模型的实现中,我想使多线程函数svmutil.svm_train
的执行成为可能。虽然我对多线程程序的实现很陌生,但我对并行编程概念有一些了解,并且我认为同时在不同参数集上训练多个模型在理论上是可行的。如何使用python多线程并行处理另一个模块的某个函数而不进行酸洗?
设置:
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()
不过,我遇到的问题是,因为它包含了一个C型svmutil.svm_train
不能腌渍指针。 Python解释器给我的错误:
ValueError: ctypes objects containing pointers cannot be pickled
我宁愿调整我的实现比pickle模块中的功能。因此,我想知道,是否有某种方法可以在不对其进行酸洗的情况下对其进行平行化处理?
另外,如何收集函数的结果?理想情况下,这将是一个训练模型列表(每次我调用该函数时函数svmutil.svm_train
的输出)。
这里讨论http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a -class – jlujan 2013-02-11 22:48:47
我不知道它是真的'svmutil.svm_train'还是其中一个不能被酸洗的参数? – 2013-02-12 05:46:25