@@ -130,7 +130,7 @@ PyParametersToJSON(const py::dict& parameters)
130130void
131131AsyncEventFutureDoneCallback (const py::object& py_future)
132132{
133- std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance ();
133+ auto stub = Stub::GetOrCreateInstance ();
134134 stub->BackgroundFutureDone (py_future);
135135}
136136
@@ -514,7 +514,7 @@ Stub::AutoCompleteModelConfig(
514514 python_backend_utils.def (
515515 " get_model_dir" ,
516516 []() {
517- std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance ();
517+ auto stub = Stub::GetOrCreateInstance ();
518518 return stub->GetModelDir ();
519519 },
520520 py::return_value_policy::reference);
@@ -568,7 +568,7 @@ Stub::Initialize(bi::managed_external_buffer::handle_t map_handle)
568568 python_backend_utils.def (
569569 " get_model_dir" ,
570570 []() {
571- std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance ();
571+ auto stub = Stub::GetOrCreateInstance ();
572572 return stub->GetModelDir ();
573573 },
574574 py::return_value_policy::reference);
@@ -1073,16 +1073,22 @@ Stub::~Stub()
10731073 memory_manager_message_queue_.reset ();
10741074}
10751075
1076- std::unique_ptr< Stub> Stub::stub_instance_ ;
1076+ static std::shared_ptr<triton::backend::python:: Stub> stub_instance{ nullptr } ;
10771077
1078- std::unique_ptr< Stub>&
1078+ std::shared_ptr<triton::backend::python:: Stub>
10791079Stub::GetOrCreateInstance ()
10801080{
1081- if (Stub::stub_instance_. get () == nullptr ) {
1082- Stub::stub_instance_ = std::make_unique< Stub>( );
1081+ if (!stub_instance ) {
1082+ stub_instance. reset ( new triton::backend::python:: Stub() );
10831083 }
10841084
1085- return Stub::stub_instance_;
1085+ return stub_instance;
1086+ }
1087+
1088+ void
1089+ Stub::DestroyInstance ()
1090+ {
1091+ stub_instance.reset ();
10861092}
10871093
10881094void
@@ -1834,7 +1840,7 @@ PYBIND11_EMBEDDED_MODULE(c_python_backend_utils, module)
18341840 " exec" ,
18351841 [](std::shared_ptr<InferRequest>& infer_request,
18361842 const bool decoupled) {
1837- std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance ();
1843+ auto stub = Stub::GetOrCreateInstance ();
18381844 std::shared_ptr<InferResponse> response =
18391845 infer_request->Exec (decoupled);
18401846 py::object response_object;
@@ -1852,7 +1858,7 @@ PYBIND11_EMBEDDED_MODULE(c_python_backend_utils, module)
18521858 " async_exec" ,
18531859 [](std::shared_ptr<InferRequest>& infer_request,
18541860 const bool decoupled) {
1855- std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance ();
1861+ auto stub = Stub::GetOrCreateInstance ();
18561862 py::object loop =
18571863 py::module_::import (" asyncio" ).attr (" get_running_loop" )();
18581864 py::cpp_function callback = [&stub, infer_request, decoupled]() {
@@ -2137,7 +2143,7 @@ main(int argc, char** argv)
21372143 std::string name = argv[8 ];
21382144 std::string runtime_modeldir = argv[9 ];
21392145
2140- std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance ();
2146+ auto stub = Stub::GetOrCreateInstance ();
21412147 try {
21422148 stub->Instantiate (
21432149 shm_growth_size, shm_default_size, shm_region_name, model_path,
@@ -2147,7 +2153,7 @@ main(int argc, char** argv)
21472153 catch (const PythonBackendException& pb_exception) {
21482154 LOG_INFO << " Failed to preinitialize Python stub: " << pb_exception.what ();
21492155 logger.reset ();
2150- stub. reset ();
2156+ Stub::DestroyInstance ();
21512157 exit (1 );
21522158 }
21532159
@@ -2160,7 +2166,7 @@ main(int argc, char** argv)
21602166#endif
21612167 std::atomic<bool > background_thread_running = {true };
21622168 std::thread background_thread =
2163- std::thread ([&parent_pid , &background_thread_running , &stub , &logger] {
2169+ std::thread ([stub , &parent_pid , &background_thread_running , &logger] {
21642170 // Send a dummy message after the stub process is launched to notify the
21652171 // parent process that the health thread has started.
21662172 std::unique_ptr<IPCMessage> ipc_message = IPCMessage::Create (
@@ -2193,7 +2199,7 @@ main(int argc, char** argv)
21932199 // Destroy stub and exit.
21942200 stub->DestroyPythonObjects ();
21952201 logger.reset ();
2196- stub. reset ();
2202+ Stub::DestroyInstance ();
21972203 exit (1 );
21982204 }
21992205 }
@@ -2227,7 +2233,7 @@ main(int argc, char** argv)
22272233 // will result in segfault.
22282234 stub->DestroyPythonObjects ();
22292235 logger.reset ();
2230- stub. reset ();
2236+ Stub::DestroyInstance ();
22312237
22322238 return 0 ;
22332239}
0 commit comments