используйте pybind11 для интерфейса функции C++ из python3
используйте Dask для распределенных вычислений
Ниже приведены программы фрагмент.
// ------------ НАЧАЛО pyCmd1.cpp --------------
Код: Выделить всё
#include
#include
#include
namespace py = pybind11;
class dbPrep {
public:
dbPrep() : m_type(-9999) {};
void setType(const int t) { m_type = t;}
int getType() const { return m_type; }
//
private:
int m_type;
};
PYBIND11_MODULE(pyCmd1, m) {
m.doc() = "pybind11 for dask data passing"; // Optional module docstring
//
py::class_(m, "dbPrep")
.def(py::init())
//.def(py::init())
.def("set_type", &dbPrep::setType)
.def("get_type", &dbPrep::getType)
// see https://github.com/pybind/pybind11/blob/master/docs/upgrade.rst
// "New API for defining custom constructors and pickling functions"
//
.def(py::pickle(
[](const dbPrep &self) { // __getstate__
return py::make_tuple();
},
[](py::tuple t) { // __setstate__, note: no `self` argument
return new dbPrep();
// or: return std::make_unique(...); // return by holder
// or: return Foo(...); // return by value (move constructor)
}
)
)
;
}
//-------- НАЧАЛО pyCmd1.py ------------------
Код: Выделить всё
import dask
from dask.distributed import Client
import pyCmd1
def init_db():
db = pyCmd1.dbPrep()
db.set_type(100)
print("@ init_db, type = ", db.get_type())
return db
`if __name__ == "__main__":
# Create a Dask client with 2 workers
client = Client(n_workers=2)
db_init = client.submit(init_db)
r1 = client.gather(db_init)
print("> db_init type = ", r1.get_type())
#
client.close()
Вывод:
@ init_db, введите = 100
db_init type = -9999
Объект dbPrep — это создается в функции Python init_db(), а для типа данных элемента установлено значение 100.
затем верните объект.
Вопрос:
Почему возвращаемое значение объекта db_init 'type' не 100, а начальное значение -9999?
`
Подробнее здесь: https://stackoverflow.com/questions/785 ... ent-submit