首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python多线程并行处理另一个模块中的函数,而不对其进行酸洗?

如何使用python多线程并行处理另一个模块中的函数,而不对其进行酸洗?
EN

Stack Overflow用户
提问于 2013-02-12 06:43:36
回答 1查看 1.8K关注 0票数 1

在我的支持向量机预测模型的实现中,我想让函数svmutil.svm_train的执行多线程。虽然我是多线程程序实现的新手,但我对并行编程概念有一定的了解,我相信同时训练具有不同参数集的多个模型在理论上是可能的。

设置:

代码语言:javascript
复制
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

将训练分成多个执行线程:

代码语言:javascript
复制
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解释器给我的错误是:

代码语言:javascript
复制
ValueError: ctypes objects containing pointers cannot be pickled

我宁愿调整我的实现,而不是以某种方式在模块中的函数。因此,我想知道,有没有什么方法可以让我并行化这个函数而不对它进行酸洗呢?

另外,我如何收集函数的结果?理想情况下,这应该是一个经过训练的模型列表(我每次调用函数时svmutil.svm_train函数的输出)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-16 07:28:24

在上面评论中链接到的问题中,我设法使用了top answer来构建解决方案。通过生成管道和进程并监听结果,我能够在外部模块中并行调用python函数。我传递给管道的函数如下:pipe.send(svmutil.svm_train(problem,param)))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14822313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档