如何处理python导入模块中c++断言导致的Celery WorkerLostError
How to handle Celery WorkerLostError due to c++ assertion in python imported module?
我有一个python模块,其中包含使用pybind11的c++代码,我已在django+celecer3.1.25应用程序中导入该代码。c++代码包含一些断言,这些断言可能会在芹菜工作者内部触发,然后导致WorkerLostError
。
我已经尝试将对pythonC++模块的调用放在try:
except:
作用域内,但是这不起作用,并且芹菜工作程序仍然崩溃。
我还尝试使用apply_async
调用中的link_error=
参数将错误回调函数绑定到芹菜任务,但该方法从未被调用。
理想情况下,我希望以某种方式捕捉错误,以便向用户显示错误消息。欢迎提出任何建议!
我通常要处理Celery任务中C++二进制文件的执行,就是使用子流程模块,尤其是子流程。运行。您将获得执行命令产生的结果代码(rc)和标准输出/错误,而不会使工作进程崩溃(WorkerLost)。最多,通过调用subprocess.run,您将不得不处理异常,这些异常是根据关键字参数check的值在非零rc上引发的:
如果check为true,并且进程以非零退出代码退出,则将引发CalledProcessError异常。其属性异常包含参数、退出代码、stdout和stderr,如果他们被俘虏了。
但是,我通常更喜欢禁用它,并自己检查返回代码。
我已经广泛使用这种方法来处理预期和意外的返回代码,以及由内存泄漏、segfault等产生的操作系统信号(rc<0)。
为了处理和格式化操作系统信号,我使用信号模块。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- C++ 使用增强正则表达式库时断言崩溃
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 如何将向量断言到特征矩阵
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- 使用 Google Test 对自定义断言函数进行单元测试
- 断言"id < 0"在Qt ActiveX中失败
- 初始值设定项列表构造和静态断言
- 在 CppUnit 中测试中止断言失败
- 使用扫描的调试断言失败
- MS 本机单元测试 - 断言::线程失败不起作用
- 如何断言 CRTP 的函数为最终函数?
- 迭代器跳闸视觉C++ 2017 断言
- 如何在 google test in windows 中管理断言
- 为什么我的Qt程序在断言失败后继续运行?
- 在C++中禁用断言宏
- 宏"断言"会在 C++20 中删除吗?
- 在 constexpr 函数中断言
- 如何在 c++11 中静态断言 std::array 类成员进行排序?