Skip to content

Commit 8178c15

Browse files
committed
fix: gil fault
1 parent 936e613 commit 8178c15

2 files changed

Lines changed: 21 additions & 12 deletions

File tree

pyWrapper.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ int PyWrapper::wrapperOnceExec(const char *usrTag, std::map <std::string, std::s
264264
}
265265
SetSidUsrTag(sid, usrTag);
266266
params["sid"] = sid;
267-
py::gil_scoped_acquire acquire;
268267
// 执行python exec 推理
269268
py::object r = _wrapperOnceExec(params, reqData, usrTag);
270269
// 此段根据python的返回 ,回写 respData
@@ -352,7 +351,6 @@ int PyWrapper::wrapperOnceExecAsync(const char *usrTag, std::map <std::string, s
352351
int ret = 0;
353352
SetSidUsrTag(sid, usrTag);
354353
params["sid"] = sid;
355-
py::gil_scoped_acquire acquire;
356354
// 执行python exec 推理
357355
py::object r = _wrapperOnceExecAsync(params, reqData, sid);
358356
// 此段根据python的返回 ,回写 respData
@@ -433,7 +431,6 @@ PyWrapper::wrapperCreate(const char *usrTag, std::map <std::string, std::string>
433431
int PyWrapper::wrapperWrite(char *handle, DataListCls reqData, std::string sid) {
434432
try {
435433
int ret = 0;
436-
py::gil_scoped_acquire acquire;
437434
// 执行python exec 推理
438435
py::object r = _wrapperWrite(handle, reqData, sid);
439436
ret = r.cast<int>();
@@ -453,7 +450,6 @@ int PyWrapper::wrapperWrite(char *handle, DataListCls reqData, std::string sid)
453450
int PyWrapper::wrapperRead(char *handle, pDataList *respData, std::string sid) {
454451
try {
455452
Response *resp;
456-
py::gil_scoped_acquire acquire;
457453
// 执行python exec 推理
458454
py::object r = _wrapperRead(handle, sid);
459455
spdlog::debug("start cast python resp to c++ object, thread_id: {}, sid: {}", gettid(), sid);
@@ -667,11 +663,17 @@ const char *GetSidUsrTag(std::string sid) {
667663
}
668664

669665
const std::string GetSidByUsrTag(const char *usrTag) {
666+
RECORD_MUTEX.lock();
670667
//通过value找 key
671668
for (std::map<std::string, const char *>::iterator it = SID_USRTAG.begin(); it != SID_USRTAG.end(); it++) {
672-
if (it->second == usrTag)
669+
if (it->second == usrTag){
670+
RECORD_MUTEX.unlock();
673671
return it->first;
672+
673+
}
674674
}
675+
RECORD_MUTEX.unlock();
676+
675677
return "";
676678
}
677679

wrapper.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ int WrapperAPI wrapperWrite(const void *handle, pDataList reqData) {
189189

190190
DataListCls req;
191191
pDataList p = reqData;
192+
py::gil_scoped_acquire acquire;
193+
192194
if (dataNum > 0) {
193195
for (int tmpIdx = 0; tmpIdx < dataNum; tmpIdx++) {
194196
DataListNode item;
@@ -218,6 +220,7 @@ int WrapperAPI wrapperWrite(const void *handle, pDataList reqData) {
218220

219221
int WrapperAPI wrapperRead(const void *handle, pDataList *respData) {
220222
int ret = 0;
223+
py::gil_scoped_acquire acquire;
221224
std::string sid = GetHandleSid((char *) handle);
222225
// 构造响应数据
223226
printf("start read...sid %s\n", sid.c_str());
@@ -246,6 +249,8 @@ wrapperExec(const char *usrTag, pParamList params, pDataList reqData, pDataList
246249
int psrCnt) {
247250
int ret = 0;
248251
std::string sid = "";
252+
py::gil_scoped_acquire acquire;
253+
249254
for (pParamList sidP = params; sidP != NULL; sidP = sidP->next) {
250255
if (NULL == sidP->key) {
251256
continue;
@@ -273,17 +278,17 @@ wrapperExec(const char *usrTag, pParamList params, pDataList reqData, pDataList
273278
}
274279
spdlog::debug("call wrapper exec: building req data, data num:{},sid:{}", dataNum, sid);
275280

276-
DataListCls req;
281+
DataListCls *req = new DataListCls();
277282
pDataList p = reqData;
278283
if (dataNum > 0) {
279284
for (int tmpIdx = 0; tmpIdx < dataNum; tmpIdx++) {
280285

281-
DataListNode item;
282-
item.key = p->key;
286+
DataListNode *item = DataListNode();
287+
item->key = p->key;
283288

284289
// 直接拷贝
285290
size_t len = static_cast<size_t>(p->len);
286-
item.data = py::bytes((char *) (p->data), len);
291+
item->data = py::bytes((char *) (p->data), len);
287292
//
288293
// 写法2:
289294
// Py_ssize_t len = static_cast<Py_ssize_t>(p->len);
@@ -296,11 +301,11 @@ wrapperExec(const char *usrTag, pParamList params, pDataList reqData, pDataList
296301
// item.data = py::bytes(data);
297302
// todo 有无0拷贝方法?
298303

299-
item.len = p->len;
304+
item->len = p->len;
300305
char t = static_cast<int>(p->type);
301-
item.type = p->type;
306+
item->type = p->type;
302307
spdlog::debug("reqDatatype :{},sid:{}", p->type, sid);
303-
req.list.push_back(item);
308+
req->list.push_back(item);
304309
p = p->next;
305310
}
306311
}
@@ -368,6 +373,8 @@ wrapperExecAsync(const char *usrTag, pParamList params, pDataList reqData, wrapp
368373
unsigned int psrIds[], int psrCnt) {
369374
int ret = 0;
370375
std::string sid = "";
376+
py::gil_scoped_acquire acquire;
377+
371378
for (pParamList sidP = params; sidP != NULL; sidP = sidP->next) {
372379
if (NULL == sidP->key) {
373380
continue;

0 commit comments

Comments
 (0)