c++ use python to import reverb error
jzstudent opened this issue · 0 comments
jzstudent commented
python:
import traceback
import reverb
class RevervbUtil(object):
# str,int,[str],int,int
def init(self, learner_addr, learner_port, reverb_table_names,
reverb_client_max_sequence_length, reverb_client_chunk_length):
self.revervb_util = revervbutil(f'{learner_addr}:{learner_port}')
self.reverb_table_names = reverb_table_names
self.reverb_client_max_sequence_length = reverb_client_max_sequence_length
self.reverb_client_chunk_length = reverb_client_chunk_length
def send_datas(self, train_data):
self.revervb_util.write_to_reverb_server_simple(self.reverb_table_names, train_data)
class revervbutil():
def __init__(self, learner_addr) -> None:
self.reverb_client = reverb.Client(learner_addr)
def write_to_reverb_server_simple(self, reverb_table_names, train_data):
try:
with self.reverb_client.writer(max_sequence_length=int(self.reverb_client_max_sequence_length),
chunk_length=int(self.reverb_client_chunk_length)) as writer:
count = 0
for sample in train_data:
for table in reverb_table_names:
writer.append(sample)
prioritezed = 1.0
writer.create_item(table, 1, prioritezed)
writer.flush()
count += 1
except Exception as e:
print(f'learner_proxy send one data to reverb server error as {str(e)}, traceback.print_exc() is {traceback.format_exc()}')
c++:
#include "learner_proxy.h"
#include <python3.7m/Python.h>
using namespace std;
int main(int argc, char* argv[])
{
//py::scoped_interpreter guard{};
Py_Initialize();
if(!Py_IsInitialized())
{
return -1;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('/data/projects/kaiwu-fwk/framework/server/cpp/src/aisrv/')");
PyObject* pModule = PyImport_ImportModule("python_reverb_util");
PyObject* pDict = PyModule_GetDict(pModule);
PyObject* pClass = PyDict_GetItemString(pDict, "RevervbUtil");
PyObject* pConstruct = PyInstanceMethod_New(pClass);
PyObject* pInstanceReverb = PyObject_CallObject(pConstruct, NULL);
return 0;
}
when I execute it, segment falut happens:
(gdb) bt
#0 0x00007fed93c8eb1a in tensorflow::kernel_factory::OpKernelRegistrar::InitInternal(tensorflow::KernelDef const*, absl::lts_2020_02_25::string_view, std::unique_ptr<tensorflow::kernel_factory::OpKernelFactory, std::default_delete<tensorflow::kernel_factory::OpKernelFactory> >) ()
from /usr/local/python-3.7/lib/python3.7/site-packages/tensorflow/python/../libtensorflow_framework.so.2
#1 0x00007fed97835395 in tensorflow::kernel_factory::OpKernelRegistrar::OpKernelRegistrar(tensorflow::KernelDef const*, absl::lts_2020_02_25::string_view, tensorflow::OpKernel* (*)(tensorflow::OpKernelConstruction*)) ()
from /usr/local/python-3.7/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so
#2 0x00007fed935a0d4f in _GLOBAL__sub_I_dataset.cc ()
from /usr/local/python-3.7/lib/python3.7/site-packages/tensorflow/python/../libtensorflow_framework.so.2
Butttt, I can run the python file in python environment.
if __name__ == '__main__':
revervb_util = RevervbUtil('127.0.0.1:9999', 1, 1)
train_data = []
revervb_util.write_to_reverb_server_simple('a', train_data)
How can I fix it? :>