【发布时间】:2021-11-08 17:46:11
【问题描述】:
我尝试了一些关于在 OpenMP 中实现 boost::python 的简单示例。这是一个:
#include <omp.h>
#include <iostream>
#include <boost/python.hpp>
namespace p = boost::python;
int main() {
Py_Initialize();
p::object glob = p::import("glob");
// glob.glob list more than 7000 files
p::object paths = glob.attr("glob")("C:\\path\\to\\the\\dir\\location");
#pragma omp parallel for default(shared) schedule(dynamic)
for (int i = 0; i < p::len(paths); i++) {
std::cout << p::extract<const char *>(p::str(paths[i])) << std::endl;
}
std::cout << "finished: " << p::len(paths) << std::endl;
return 0;
}
如果不使用 OpenMP,该代码可以正常工作。但是,如果使用它,我会收到 139 的错误。我也尝试过使用 Python API (PyObject *),但仍然遇到同样的问题。我已经指出问题出在我们导入 Python 模块时。
因此,我们是否有可能在 boost::python 或 Python C API 上使用并行编程,尤其是当我们在 C++ 上使用 Python 模块时?
【问题讨论】: