MCPcopy Create free account
hub / github.com/RedisGears/RedisGears / FinishAsyncScriptRun

Function FinishAsyncScriptRun

plugins/python/redisgears_python.c:4288–4330  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4286}
4287
4288static void FinishAsyncScriptRun(RAI_OnFinishCtx *onFinishCtx, void *private_data) {
4289
4290 RAI_Error *error;
4291 RedisAI_InitError(&error);
4292 RAI_ScriptRunCtx* sctx = RedisAI_GetAsScriptRunCtx(onFinishCtx, error);
4293
4294 RedisGearsPy_LOCK
4295 PyObject* future = private_data;
4296 PyObject* pArgs = PyTuple_New(2);
4297 PyTuple_SetItem(pArgs, 0, future);
4298
4299 if (RedisAI_GetErrorCode(error) != RedisAI_ErrorCode_OK) {
4300 const char *errStr = RedisAI_GetError(error);
4301 PyObject* pyErr = PyUnicode_FromStringAndSize(errStr, strlen(errStr));
4302 PyTuple_SetItem(pArgs, 1, pyErr);
4303 PyObject_CallObject(setFutureExceptionFunction, pArgs);
4304 goto finish;
4305 }
4306
4307 PyObject* tensorList = PyList_New(0);
4308 for(size_t i = 0 ; i < RedisAI_ScriptRunCtxNumOutputs(sctx) ; ++i){
4309 PyTensor* pyt = PyObject_New(PyTensor, &PyTensorType);
4310 pyt->t = RedisAI_TensorGetShallowCopy(RedisAI_ScriptRunCtxOutputTensor(sctx, i));
4311 PyList_Append(tensorList, (PyObject*)pyt);
4312 GearsPyDecRef((PyObject*)pyt);
4313 }
4314
4315 PyTuple_SetItem(pArgs, 1, tensorList);
4316 PyObject* r = PyObject_CallObject(setFutureResultsFunction, pArgs);
4317 if(!r){
4318 char* err = getPyError();
4319 RedisModule_Log(NULL, "warning", "Error happened when releasing execution future, error='%s'", err);
4320 RG_FREE(err);
4321 }else{
4322 GearsPyDecRef(r);
4323 }
4324
4325 finish:
4326 RedisAI_FreeError(error);
4327 RedisAI_ScriptRunCtxFree(sctx);
4328 GearsPyDecRef(pArgs);
4329 RedisGearsPy_UNLOCK
4330}
4331
4332static PyObject* scriptRunnerRunAsync(PyObject *cls, PyObject *args){
4333 verifyRedisAILoaded();

Callers

nothing calls this directly

Calls 2

GearsPyDecRefFunction · 0.85
getPyErrorFunction · 0.85

Tested by

no test coverage detected