Skip to content

Commit 9c27174

Browse files
committed
feat: support load Unload Res
1 parent eb9cc95 commit 9c27174

File tree

4 files changed

+85
-18
lines changed

4 files changed

+85
-18
lines changed

pyWrapper.cpp

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ PyWrapper::PyWrapper() {
119119
_wrapperOnceExec = _obj.attr("wrapperOnceExec");
120120
_wrapperOnceExecAsync = _obj.attr("wrapperOnceExecAsync");
121121
_wrapperError = _obj.attr("wrapperError");
122+
123+
// 个性化
124+
_wrapperLoadRes = _obj.attr("wrapperLoadRes");
125+
_wrapperUnloadRes = _obj.attr("wrapperUnloadRes");
122126
// stream support
123127
_wrapperCreate = _obj.attr("wrapperCreate");
124128
_wrapperWrite = _obj.attr("wrapperWrite");
@@ -153,6 +157,8 @@ PyWrapper::~PyWrapper() {
153157
_wrapperCreate.release();
154158
_wrapperWrite.release();
155159
_wrapperRead.release();
160+
_wrapperUnloadRes.release();
161+
_wrapperLoadRes.release();
156162
pybind11::gil_scoped_release release;
157163
}
158164

@@ -174,6 +180,9 @@ void PyWrapper::ReloadWrapper() {
174180
_wrapperCreate = _obj.attr("wrapperCreate");
175181
_wrapperWrite = _obj.attr("wrapperWrite");
176182
_wrapperRead = _obj.attr("wrapperRead");
183+
184+
_wrapperLoadRes = _obj.attr("wrapperLoadRes");
185+
_wrapperUnloadRes = _obj.attr("wrapperUnloadRes");
177186
pybind11::gil_scoped_release release;
178187
}
179188

@@ -240,15 +249,15 @@ int PyWrapper::wrapperFini() {
240249
}
241250

242251
int PyWrapper::wrapperOnceExec(const char *usrTag, std::map <std::string, std::string> params, DataListCls reqData,
243-
pDataList *respData, std::string sid, wrapperCallback cb) {
252+
pDataList *respData, std::string sid, wrapperCallback cb, unsigned int psrId ) {
244253
SetSidUsrTag(sid, usrTag);
245254
try {
246255
if (cb != nullptr) {
247256
SetSidCallBack(cb, sid);
248257
}
249258
params["sid"] = sid;
250259
// 执行python exec 推理
251-
py::object r = _wrapperOnceExec(params, reqData, usrTag);
260+
py::object r = _wrapperOnceExec(params, reqData, usrTag, psrId);
252261
// 此段根据python的返回 ,回写 respData
253262
Response *resp;
254263
spdlog::debug("start cast python resp to c++ object, thread_id: {}, sid: {}", gettid(), sid);
@@ -334,7 +343,7 @@ int PyWrapper::wrapperOnceExec(const char *usrTag, std::map <std::string, std::s
334343

335344

336345
int PyWrapper::wrapperOnceExecAsync(const char *usrTag, std::map <std::string, std::string> params, DataListCls reqData,
337-
std::string sid, wrapperCallback cb) {
346+
std::string sid, wrapperCallback cb, unsigned int psrId) {
338347
try {
339348
if (cb != nullptr) {
340349
SetSidCallBack(cb, sid);
@@ -344,7 +353,7 @@ int PyWrapper::wrapperOnceExecAsync(const char *usrTag, std::map <std::string, s
344353
SetSidUsrTag(sid, usrTag);
345354
params["sid"] = sid;
346355
// 执行python exec 推理
347-
py::object r = _wrapperOnceExecAsync(params, reqData, sid);
356+
py::object r = _wrapperOnceExecAsync(params, reqData, sid, psrId);
348357
// 此段根据python的返回 ,回写 respData
349358
spdlog::info("start wrapperExecAsync cast python resp to c++ object, thread_id: {}, sid: {}", gettid(), sid);
350359
ret = r.cast<int>();
@@ -398,15 +407,15 @@ int PyWrapper::wrapperSetTraceFunc(CtrlType type, wrapperTraceLog mc) {
398407

399408
std::string
400409
PyWrapper::wrapperCreate(const char *usrTag, std::map <std::string, std::string> params, wrapperCallback cb,
401-
int *errNum, std::string sid) {
410+
int *errNum, std::string sid, unsigned int psrId) {
402411
SessionCreateResponse *resp;
403412
SetSidCallBack(cb, sid);
404413
SetSidUsrTag(sid, usrTag);
405414

406415
try {
407416
py::gil_scoped_acquire acquire;
408417
// 此段根据python的返回 ,回写 respData
409-
py::object r = _wrapperCreate(params, sid);
418+
py::object r = _wrapperCreate(params, sid, psrId);
410419
resp = r.cast<SessionCreateResponse *>();
411420
*errNum = resp->errCode;
412421
if (*errNum != 0) {
@@ -525,6 +534,36 @@ int PyWrapper::wrapperExecFree(const char *usrTag) {
525534
return 0;
526535
}
527536

537+
int PyWrapper::wrapperLoadRes(pDataList p, unsigned int resId) {
538+
DataListCls perData;
539+
if (dataNum > 0) {
540+
for (int tmpIdx = 0; tmpIdx < dataNum; tmpIdx++) {
541+
DataListNode item;
542+
item.key = p->key;
543+
544+
// 直接拷贝
545+
size_t len = static_cast<size_t>(p->len);
546+
item.data = py::bytes((char *) (p->data), len);
547+
548+
item.len = p->len;
549+
char t = static_cast<int>(p->type);
550+
item.type = p->type;
551+
item.status = p->status;
552+
spdlog::debug("reqDatatype :{},sid:{}", p->type, sid);
553+
perData.list.push_back(item);
554+
p = p->next;
555+
}
556+
}
557+
py::gil_scoped_acquire acquire;
558+
// 执行python exec 推理
559+
py::object r = _wrapperLoadRes(perData, resId);
560+
return 0;
561+
}
562+
563+
int PyWrapper::wrapperUnloadRes(unsigned int resId) {
564+
return 0;
565+
}
566+
528567
int PyWrapper::wrapperTest() {
529568
py::gil_scoped_acquire acquire;
530569
std::vector <py::dict> req;

pyWrapper.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,16 @@ class PyWrapper {
123123

124124
int wrapperOnceExec(const char *usrTag, std::map <std::string, std::string> params, DataListCls reqData,
125125
pDataList *respData,
126-
std::string sid, wrapperCallback cb);
126+
std::string sid, wrapperCallback cb, unsigned int psrId);
127127

128128
int wrapperOnceExecAsync(const char *usrTag, std::map <std::string, std::string> params, DataListCls reqData,
129-
std::string sid, wrapperCallback cb);
129+
std::string sid, wrapperCallback cb, unsigned int psrId);
130130

131131
int wrapperFini();
132132

133133
std::string
134134
wrapperCreate(const char *usrTag, std::map <std::string, std::string> params, wrapperCallback cb, int *errNum,
135-
std::string sid);
135+
std::string sid, unsigned int psrId);
136136

137137
int wrapperSetMetricFunc(CtrlType type, wrapperMeterCustom mc);
138138

@@ -148,6 +148,10 @@ class PyWrapper {
148148

149149
int wrapperTest();
150150

151+
int wrapperLoadRes(pDataList perData, unsigned int resId);
152+
153+
int wrapperUnloadRes(unsigned int resId);
154+
151155
void setCallBack(wrapperCallback cb);
152156

153157
wrapperMeterCustom metric_cb;
@@ -164,6 +168,8 @@ class PyWrapper {
164168
py::object _wrapperCreate;
165169
py::object _wrapperWrite;
166170
py::object _wrapperRead;
171+
py::object _wrapperLoadRes;
172+
py::object _wrapperUnloadRes;
167173
py::object _wrapperTest;
168174

169175
wrapperCallback cb_;

wrapper.cpp

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,13 @@ const char *WrapperAPI wrapperVersion() {
136136
}
137137

138138
int WrapperAPI wrapperLoadRes(pDataList perData, unsigned int resId) {
139-
return 0;
139+
int ret = pyWrapper->wrapperLoadRes(perData, resId);
140+
return ret;
140141
}
141142

142143
int WrapperAPI wrapperUnloadRes(unsigned int resId) {
143-
return 0;
144+
int ret = pyWrapper->wrapperUnloadRes(resId);
145+
return ret;
144146
}
145147

146148
const void *
@@ -171,7 +173,13 @@ WrapperAPI wrapperCreate(const char *usrTag, pParamList params, wrapperCallback
171173
spdlog::debug("wrapper create param, key:{},value:{},sid:{}", p->key, p->value, sid);
172174
}
173175

174-
std::string handle = pyWrapper->wrapperCreate(usrTag, pyParams, cb, errNum, sid);
176+
unsigned int psrId = 0;
177+
if (psrCnt > 0) {
178+
// 对于python加载器只运行有1个psr资源
179+
psrId = psrIds[0];
180+
}
181+
182+
std::string handle = pyWrapper->wrapperCreate(usrTag, pyParams, cb, errNum, sid, psrId);
175183
char *handlePtr = strdup(handle.c_str());
176184
if (*errNum != 0) {
177185
spdlog::debug("wrapper exec Error, errNum:{}, sid:{}", *errNum, sid);
@@ -199,7 +207,6 @@ int WrapperAPI wrapperWrite(const void *handle, pDataList reqData) {
199207
for (int tmpIdx = 0; tmpIdx < dataNum; tmpIdx++) {
200208
DataListNode item;
201209
item.key = p->key;
202-
203210
// 直接拷贝
204211
size_t len = static_cast<size_t>(p->len);
205212
item.data = py::bytes((char *) (p->data), len);
@@ -311,9 +318,13 @@ wrapperExec(const char *usrTag, pParamList params, pDataList reqData, pDataList
311318
p = p->next;
312319
}
313320
}
314-
321+
unsigned int psrId = 0;
322+
if (psrCnt > 0) {
323+
// 对于python加载器只运行有1个psr资源
324+
psrId = psrIds[0];
325+
}
315326
// 构造响应数据
316-
ret = pyWrapper->wrapperOnceExec(usrTag, pyParams, req, respData, sid, nullptr);
327+
ret = pyWrapper->wrapperOnceExec(usrTag, pyParams, req, respData, sid, nullptr, psrId);
317328
if (ret != 0) {
318329
spdlog::error("wrapper exec error!");
319330
return ret;
@@ -430,8 +441,13 @@ wrapperExecAsync(const char *usrTag, pParamList params, pDataList reqData, wrapp
430441
}
431442
}
432443

444+
unsigned int psrId = 0;
445+
if (psrCnt > 0) {
446+
// 对于python加载器只运行有1个psr资源
447+
psrId = psrIds[0];
448+
}
433449
// 构造响应数据
434-
ret = pyWrapper->wrapperOnceExecAsync(usrTag, pyParams, req, sid, callback);
450+
ret = pyWrapper->wrapperOnceExecAsync(usrTag, pyParams, req, sid, callback, psrId);
435451
if (ret != 0) {
436452
spdlog::get("stderr_console")->error("wrapper exec async error!");
437453
return ret;

wrapper.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def wrapperInit(cls, config: {}) -> int:
105105
ret:错误码。无错误码时返回0
106106
'''
107107

108-
def wrapperOnceExec(cls, params: {}, reqData: DataListCls) -> Response:
108+
def wrapperOnceExec(cls, params: {}, reqData: DataListCls, usrTag: str = "", psrID: int = 0) -> Response:
109109
log.info("got reqdata , %s" % reqData.list)
110110
# print(type(reqData.list[0].data))
111111
# print(type(reqData.list[0].data))
@@ -155,12 +155,18 @@ def wrapperError(cls, ret: int) -> str:
155155
return "user error defined here"
156156
return ""
157157

158-
def wrapperCreate(cls, params: {}, errNum: int, sid: str) -> str:
158+
def wrapperCreate(cls, params: {}, errNum: int, sid: str, persId: int = 0) -> str:
159159
errNum = 5
160160
print(params)
161161
handle = "ccch"
162162
return handle
163163

164+
def wrapperLoadRes(self, reqData: DataListCls, resId: int) -> int:
165+
return 0
166+
167+
def wrapperUnloadRes(self, resId: int) -> int:
168+
return 0
169+
164170
def wrapperTestFunc(cls, data: [], respData: []):
165171
r = Response()
166172
l = ResponseData()

0 commit comments

Comments
 (0)