Skip to content

Commit

Permalink
Fix race condition with python logging
Browse files Browse the repository at this point in the history
  • Loading branch information
koubaa committed Dec 11, 2024
1 parent 48c127d commit 23cc7f7
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 10 deletions.
24 changes: 24 additions & 0 deletions python/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,30 @@ namespace py = pybind11;
// used in Core.hpp
py::object kp_trace, kp_debug, kp_info, kp_warning, kp_error;

static void kp_log(int level, const std::string& msg) {
py::gil_scoped_acquire gil;
switch (level) {
case 0:
kp_trace(msg); break;
case 1:
kp_debug(msg); break;
case 2:
kp_info(msg); break;
case 3:
kp_warning(msg); break;
case 4:
kp_error(msg); break;
default:
break;
}
}

void py_log_trace(const std::string& msg) {kp_log(0, msg);}
void py_log_debug(const std::string& msg) {kp_log(1, msg);}
void py_log_info(const std::string& msg) {kp_log(2, msg);}
void py_log_warning(const std::string& msg) {kp_log(3, msg);}
void py_log_error(const std::string& msg) {kp_log(4, msg);}

std::unique_ptr<kp::OpAlgoDispatch>
opAlgoDispatchPyInit(std::shared_ptr<kp::Algorithm>& algorithm,
const py::array& push_consts)
Expand Down
7 changes: 6 additions & 1 deletion src/include/kompute/Core.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,10 @@ typedef std::vector<float> Constants;
#include <pybind11/pybind11.h>
namespace py = pybind11;
// from python/src/main.cpp
extern py::object kp_trace, kp_debug, kp_info, kp_warning, kp_error;

extern void py_log_trace(const std::string& msg);
extern void py_log_debug(const std::string& msg);
extern void py_log_info(const std::string& msg);
extern void py_log_warning(const std::string& msg);
extern void py_log_error(const std::string& msg);
#endif
20 changes: 11 additions & 9 deletions src/include/kompute/logger/Logger.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ static const char* KOMPUTE_LOG_TAG = "KomputeLog";
#else
#if KOMPUTE_BUILD_PYTHON
#include <fmt/core.h>
#include <pybind11/pybind11.h>
namespace py = pybind11;
// from python/src/main.cpp
extern py::object kp_trace, kp_debug, kp_info, kp_warning, kp_error;
extern void py_log_trace(const std::string& msg);
extern void py_log_debug(const std::string& msg);
extern void py_log_info(const std::string& msg);
extern void py_log_warning(const std::string& msg);
extern void py_log_error(const std::string& msg);
#else
#include <fmt/core.h>
#endif // KOMPUTE_BUILD_PYTHON
Expand Down Expand Up @@ -57,7 +59,7 @@ setupLogger();
ANDROID_LOG_VERBOSE, KOMPUTE_LOG_TAG, fmt::format(__VA_ARGS__).c_str()))
#else
#if KOMPUTE_BUILD_PYTHON
#define KP_LOG_TRACE(...) kp_trace(fmt::format(__VA_ARGS__))
#define KP_LOG_TRACE(...) py_log_trace(fmt::format(__VA_ARGS__))
#else
#define KP_LOG_TRACE(...) \
fmt::print("[{} {}] [trace] [{}:{}] {}\n", \
Expand All @@ -81,7 +83,7 @@ setupLogger();
ANDROID_LOG_DEBUG, KOMPUTE_LOG_TAG, fmt::format(__VA_ARGS__).c_str()))
#else
#if KOMPUTE_BUILD_PYTHON
#define KP_LOG_DEBUG(...) kp_debug(fmt::format(__VA_ARGS__))
#define KP_LOG_DEBUG(...) py_log_debug(fmt::format(__VA_ARGS__))
#else
#ifdef __FILE_NAME__ // gcc 12 provides only file name without path
#define KP_LOG_DEBUG(...) \
Expand All @@ -98,7 +100,7 @@ setupLogger();
__TIME__, \
__FILE__, \
__LINE__, \
fmt::format(__VA_ARGS__))
fmt::format(__VA_ARGS__)); std::cout << std::flush
#endif // __FILE__NAME__
#endif // KOMPUTE_BUILD_PYTHON
#endif // VK_USE_PLATFORM_ANDROID_KHR
Expand All @@ -115,7 +117,7 @@ setupLogger();
ANDROID_LOG_INFO, KOMPUTE_LOG_TAG, fmt::format(__VA_ARGS__).c_str()))
#else
#if KOMPUTE_BUILD_PYTHON
#define KP_LOG_INFO(...) kp_info(fmt::format(__VA_ARGS__))
#define KP_LOG_INFO(...) py_log_info(fmt::format(__VA_ARGS__))
#else
#define KP_LOG_INFO(...) \
fmt::print("[{} {}] [info] [{}:{}] {}\n", \
Expand All @@ -139,7 +141,7 @@ setupLogger();
ANDROID_LOG_WARN, KOMPUTE_LOG_TAG, fmt::format(__VA_ARGS__).c_str()))
#else
#if KOMPUTE_BUILD_PYTHON
#define KP_LOG_WARN(...) kp_warning(fmt::format(__VA_ARGS__))
#define KP_LOG_WARN(...) py_log_warning(fmt::format(__VA_ARGS__))
#else
#define KP_LOG_WARN(...) \
fmt::print("[{} {}] [warn] [{}:{}] {}\n", \
Expand All @@ -163,7 +165,7 @@ setupLogger();
ANDROID_LOG_ERROR, KOMPUTE_LOG_TAG, fmt::format(__VA_ARGS__).c_str()))
#else
#if KOMPUTE_BUILD_PYTHON
#define KP_LOG_ERROR(...) kp_error(fmt::format(__VA_ARGS__))
#define KP_LOG_ERROR(...) py_log_error(fmt::format(__VA_ARGS__))
#else
#define KP_LOG_ERROR(...) \
fmt::print("[{} {}] [error] [{}:{}] {}\n", \
Expand Down

0 comments on commit 23cc7f7

Please sign in to comment.