Dask pybind11, как получить правильное значение из client.submit()Python

Программы на Python
Anonymous
Dask pybind11, как получить правильное значение из client.submit()

Сообщение Anonymous »

У меня вопрос по поводу возвращаемого значения объекта из python.
используйте 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)
}
)
)
;
}
// ----- END pyCmd1.cpp ------------------
//-------- НАЧАЛО 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()
// --- END pyCmd1.py ---------
Вывод:
@ init_db, введите = 100

db_init type = -9999

Объект dbPrep — это создается в функции Python init_db(), а для типа данных элемента установлено значение 100.
затем верните объект.
Вопрос:
Почему возвращаемое значение объекта db_init 'type' не 100, а начальное значение -9999?
`

Подробнее здесь: https://stackoverflow.com/questions/785 ... ent-submit

Вернуться в «Python»