Skip to content

Commit cb31a3c

Browse files
committed
[feat] use py::keep_alive
1 parent 9fe7ccf commit cb31a3c

File tree

7 files changed

+39
-38
lines changed

7 files changed

+39
-38
lines changed

python/PyCGraph.cpp

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ PYBIND11_MODULE(PyCGraph, m) {
2121
.def(py::init<int, const std::string&>())
2222
.def("getCode", &CStatus::getCode)
2323
.def("getInfo", &CStatus::getInfo)
24-
.def("isOK", &CStatus::isOK);
24+
.def("isOK", &CStatus::isOK)
25+
.def("isErr", &CStatus::isErr);
2526

2627
py::enum_<GMultiConditionType>(m, "GMultiConditionType")
2728
.value("SERIAL", GMultiConditionType::SERIAL)
@@ -37,7 +38,8 @@ PYBIND11_MODULE(PyCGraph, m) {
3738
py::class_<PyGPipeline, std::unique_ptr<PyGPipeline, py::nodelete> >(m, "GPipeline")
3839
.def(py::init<>())
3940
.def("init", &PyGPipeline::init)
40-
.def("createGParam", &PyGPipeline::__createGParam_4py)
41+
.def("createGParam", &PyGPipeline::__createGParam_4py,
42+
py::keep_alive<1, 2>())
4143
.def("getGParam", &PyGPipeline::__getGParam_4py)
4244
.def("run", &PyGPipeline::run, py::call_guard<py::gil_scoped_release>())
4345
.def("process", &PyGPipeline::process, py::call_guard<py::gil_scoped_release>(),
@@ -48,15 +50,17 @@ PYBIND11_MODULE(PyCGraph, m) {
4850
py::arg("depends") = GElementPtrSet{},
4951
py::arg("name") = CGRAPH_EMPTY,
5052
py::arg("loop") = CGRAPH_DEFAULT_LOOP_TIMES,
51-
"register a GElement with dependencies, name, and loop count.");
53+
py::keep_alive<1, 2>());
5254

5355
py::class_<GElement, PywGElement, std::unique_ptr<GElement, py::nodelete> >(m, "GElement")
5456
.def(py::init<>())
57+
.def("createGParam", &GElement::__createGParam_4py,
58+
py::keep_alive<1, 2>())
5559
.def("getGParam", &GElement::__getGParam_4py)
5660
.def("getName", &GElement::getName)
5761
.def("setName", &GElement::setName)
5862
.def("addDependGElements", &GElement::addDependGElements,
59-
py::arg("elements"))
63+
py::arg("elements"))
6064
.def("setLoop", &GElement::setLoop);
6165

6266
py::class_<GNode, PywGNode, GElement, std::unique_ptr<GNode, py::nodelete> >(m, "GNode")
@@ -70,32 +74,42 @@ PYBIND11_MODULE(PyCGraph, m) {
7074

7175
py::class_<PyGCluster, GElement, std::unique_ptr<PyGCluster, py::nodelete> >(m, "GCluster")
7276
.def(py::init<const CGraph::GElementPtrArr&>(),
73-
py::arg("elements") = GElementPtrArr{})
77+
py::arg("elements") = GElementPtrArr{},
78+
py::keep_alive<1, 2>())
7479
.def("addGElements", &PyGCluster::addGElements,
75-
py::arg("elements"));
80+
py::arg("elements"),
81+
py::keep_alive<1, 2>());
7682

7783
py::class_<PyGRegion, GElement, std::unique_ptr<PyGRegion, py::nodelete> >(m, "GRegion")
7884
.def(py::init<const CGraph::GElementPtrArr&>(),
79-
py::arg("elements") = GElementPtrArr{})
85+
py::arg("elements") = GElementPtrArr{},
86+
py::keep_alive<1, 2>())
8087
.def("addGElements", &PyGRegion::addGElements,
81-
py::arg("elements"));
88+
py::arg("elements"),
89+
py::keep_alive<1, 2>());
8290

8391
py::class_<PywGCondition, GElement, std::unique_ptr<PywGCondition, py::nodelete> >(m, "GCondition")
8492
.def(py::init<const CGraph::GElementPtrArr&>(),
85-
py::arg("elements") = GElementPtrArr{})
93+
py::arg("elements") = GElementPtrArr{},
94+
py::keep_alive<1, 2>())
8695
.def("getRange", &PywGCondition::__getRange_4py)
8796
.def("addGElements", &PywGCondition::addGElements,
88-
py::arg("elements"));
97+
py::arg("elements"),
98+
py::keep_alive<1, 2>());
8999

90100
py::class_<PyGMultiCondition<CGraph::GMultiConditionType::SERIAL>, GElement>(m, "GSerialMultiCondition")
91101
.def(py::init<const CGraph::GElementPtrArr&>(),
92-
py::arg("elements") = GElementPtrArr{})
102+
py::arg("elements") = GElementPtrArr{},
103+
py::keep_alive<1, 2>())
93104
.def("addGElements", &PyGMultiCondition<CGraph::GMultiConditionType::SERIAL>::addGElements,
94-
py::arg("elements"));
105+
py::arg("elements"),
106+
py::keep_alive<1, 2>());
95107

96108
py::class_<PyGMultiCondition<CGraph::GMultiConditionType::PARALLEL>, GElement>(m, "GParallelMultiCondition")
97109
.def(py::init<const CGraph::GElementPtrArr&>(),
98-
py::arg("elements") = GElementPtrArr{})
110+
py::arg("elements") = GElementPtrArr{},
111+
py::keep_alive<1, 2>())
99112
.def("addGElements", &PyGMultiCondition<CGraph::GMultiConditionType::PARALLEL>::addGElements,
100-
py::arg("elements"));
113+
py::arg("elements"),
114+
py::keep_alive<1, 2>());
101115
}

python/tutorial/MyGNode/MyWriteParamNode.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ def run(self):
2020
param.value += 1
2121
print('[{0}] value is {1}, count is {2}'.format(self.getName(), param.value, param.count))
2222
param.unlock()
23-
return CStatus()
23+
return CStatus()

src/GraphCtrl/GraphElement/GElement.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -585,9 +585,4 @@ CBool GElement::isDefaultBinding() const {
585585
return CGRAPH_DEFAULT_BINDING_INDEX == binding_index_;
586586
}
587587

588-
589-
GParamPtr GElement::__getGParam_4py(const std::string& key) {
590-
return param_manager_ ? param_manager_->__get_4py(key) : nullptr;
591-
}
592-
593588
CGRAPH_NAMESPACE_END

src/GraphCtrl/GraphElement/GElement.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -484,10 +484,6 @@ class GElement : public GElementObject,
484484
CGRAPH_DECLARE_GPARAM_MANAGER_WRAPPER_WITH_MEMBER
485485
CGRAPH_DECLARE_GEVENT_MANAGER_WRAPPER_WITH_MEMBER
486486
CGRAPH_DECLARE_GSTAGE_MANAGER_WRAPPER_WITH_MEMBER
487-
488-
public:
489-
/// 以下函数功能,仅供py版本使用
490-
GParamPtr __getGParam_4py(const std::string& key);
491487
};
492488

493489
using GElementRef = GElement &;

src/GraphCtrl/GraphParam/GParamManagerWrapper.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ CGRAPH_NAMESPACE_BEGIN
9797
return keys; \
9898
} \
9999
\
100+
public: \
101+
GParamPtr __getGParam_4py(const std::string& key) { \
102+
return param_manager_ ? param_manager_->__get_4py(key) : nullptr; \
103+
} \
104+
\
105+
CStatus __createGParam_4py(GParamPtr param, const std::string& key) { \
106+
CGRAPH_ASSERT_NOT_NULL(param_manager_) \
107+
return param_manager_->__create_4py(param, key); \
108+
} \
109+
\
100110
private: \
101111
/**
102112
* 设置统一管控参数类

src/GraphCtrl/GraphPipeline/GPipeline.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -365,14 +365,4 @@ CStatus GPipeline::__interRegister_4py(CGraph::GElementPtr element, const CGraph
365365
return innerRegister(element, depends, name, loop);
366366
}
367367

368-
369-
CStatus GPipeline::__createGParam_4py(GParamPtr param, const std::string& key) {
370-
return param_manager_->__create_4py(param, key);
371-
}
372-
373-
374-
GParamPtr GPipeline::__getGParam_4py(const std::string& key) {
375-
return param_manager_ ? param_manager_->__get_4py(key) : nullptr;
376-
}
377-
378368
CGRAPH_NAMESPACE_END

src/GraphCtrl/GraphPipeline/GPipeline.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -441,10 +441,6 @@ class GPipeline : public GPipelineObject,
441441
public:
442442
CStatus __interRegister_4py(GElementPtr element, const GElementPtrSet &depends,
443443
const std::string &name, CSize loop);
444-
445-
CStatus __createGParam_4py(GParamPtr param, const std::string& key);
446-
447-
GParamPtr __getGParam_4py(const std::string& key);
448444
};
449445

450446
using GPipelinePtr = GPipeline *;

0 commit comments

Comments
 (0)