diff --git a/src/dap_chain_plugins.c b/src/dap_chain_plugins.c
index 98a8822e77cd30f2b7e3a213245e8bbaba290f36..e3ed1e3e49944ee491c88fb61cca10d904716e9d 100644
--- a/src/dap_chain_plugins.c
+++ b/src/dap_chain_plugins.c
@@ -36,9 +36,6 @@ int dap_chain_plugins_init(dap_config_t *config){
     }
     return 0;
 }
-void dap_chain_plugins_deinit(){
-    Py_Finalize();
-}
 
 void dap_chain_plugins_loading(){
     log_it(L_NOTICE, "Loading plugins");
@@ -123,3 +120,23 @@ void dap_chain_plugins_load_plugin(const char *dir_path, const char *name){
     }
 }
 
+void dap_chain_plugins_deinit(){
+    log_it(L_NOTICE, "Deinit python plugins");
+    dap_chain_plugin_list_module_t *plugins = dap_chain_plugins_list_get();
+    dap_chain_plugin_list_module_t *plugin;
+    dap_chain_plugin_list_module_t *tmp;
+    PyObject *res_int = NULL;
+    LL_FOREACH_SAFE(plugins, plugin, tmp){
+        PyObject *func_deinit = PyObject_GetAttrString(plugin->obj_module, "deinit");
+        if (func_deinit != NULL || PyCallable_Check(func_deinit)){
+            res_int = PyEval_CallObject(func_deinit, NULL);
+        } else {
+            log_it(L_WARNING, "For plugin %s can't callable function deinit", plugin->name);
+        }
+        DAP_FREE(plugin->name);
+        Py_XDECREF(plugin->obj_module);
+        LL_DELETE(plugins, plugin);
+    }
+    Py_Finalize();
+}
+