一次python3服务器500错误文件日志打印不出的事件

线上遇到一个问题,服务器返回500错误,但是没有任何日志输出 我们使用的是loguru 0.5.3版本,打印日志,同时输出到文件和标准输出流,当然标准输出流是没法看了,直接重定向/dev/null 了 怀疑是loguru出了问题 在内网复现后,把服务器放到前台,标准输出流果然有日志出现

xmlrpc.client.Fault: <Fault 1: "<class 'xml.parsers.expat.ExpatError'>:not well-formed (invalid token): line 12, column 79">

--- Logging error in Loguru Handler [#2](https://laidback.montaigne.io/tags/2) ---

Record was: None

Traceback (most recent call last):

  File "/usr/local/python3/lib/python3.8/site-packages/loguru/_handler.py", line 272, in _queued_writer

    message = queue.get()

  File "/usr/local/python3/lib/python3.8/multiprocessing/queues.py", line 358, in get

    return _ForkingPickler.loads(res)

TypeError: __init__() missing 2 required positional arguments: 'faultCode' and 'faultString'

--- End of logging error ---

这看起来有些费解。我们是使用了loguru的 非同步打印日志的方式,用于多进程的情况下,它会把日志放到一个队列里,然后有个单独线程从这个队列里取到这个值,这中间python底层是用到pickle来做序列化。 xmlrpc.client.Fault定义如下

class Fault(Error):
    """Indicates an XML-RPC fault package."""
    def __init__(self, faultCode, faultString, **extra):
        Error.__init__(self)
        self.faultCode = faultCode
        self.faultString = faultString
    def __repr__(self):
        return "<%s %s: %r>" % (self.__class__.__name__,
                                self.faultCode, self.faultString)

查了些资料后发现 python - Cannot unpickle Exception subclass - Stack Overflow (python3.5 前的一个类似错误) https://github.com/python/cpython/blob/main/Objects/exceptions.c#L144 (BaseException的reduce方法)

static PyObject *
BaseException_reduce(PyBaseExceptionObject *self, PyObject *Py_UNUSED(ignored))
{
    if (self->args && self->dict)
        return PyTuple_Pack(3, Py_TYPE(self), self->args, self->dict);
    else
        return PyTuple_Pack(2, Py_TYPE(self), self->args);
}

Fault继承于Exception, Exception继承于BaseException,BaseException有个属性叫args 问题就出在Fault的init函数里 Error.init(self) 这一行,等于args属性最后是空的, 反序列化的时候会调用 reduce 会返回Fault类和空的args,然后用它们实例化Fault类,那就出错了, 因为Fault需要两个位置参数 faultCode, faultString 也就是我们开始看到的错误。 回到开始的问题,作者已经修复了无法反序列化这个问题, https://github.com/Delgan/loguru/pull/963 只要升级loguru到0.7.2就行

<think>嗯,用户问的是关于CodeRunner生成不出内容的问题。首先,我需要理解CodeRunner是什么。通常,CodeRunner是一个用于编程练习和自动评测的工具,常见于在线学习平台。用户可能在使用时遇到了生成内容失败的情况。 接下来,我要考虑可能的原因。常见问题可能包括代码语法错误、环境配置问题、资源限制,或者服务器连接问题。比如,用户可能写了错误的代码导致运行超时或崩溃,或者环境没有安装必要的依赖库。另外,内存或CPU资源不足也可能导致无法生成输出。 然后,我需要整理解决步骤。首先检查代码语法和逻辑错误,然后验证运行环境和依赖项是否配置正确。接着,查看资源使用情况,比如内存是否不足。如果是在线服务,可能需要检查网络连接或联系技术支持。最后,查看日志错误信息,这些通常能提供具体的线索。 用户可能需要具体的例子,比如如何检查Python代码中的无限循环,或者如何查看错误日志。同时,提醒用户提供更多上下文,比如错误消息或代码片段,可以更准确地定位问题。 需要确保回答结构清晰,分点列出可能的原因和解决方法,避免使用专业术语过多,保持语言通俗易懂。同时,遵循系统指令,正确使用LaTeX格式,比如在提到变量时用$符号包裹,如变量名$x$的例子。 最后,确保回答真实可靠,不猜测不确定的原因,建议用户提供更多信息以便进一步帮助。同时注意使用中文,保持口语化,避免使用Markdown格式。</think>关于CodeRunner生成内容失败的问题,可能涉及以下原因及解决思路: $$环境配置问题$$ 1. **依赖缺失**:检查是否缺少必要库(如Python的$numpy$) 2. **路径错误**:验证文件读写路径是否正确(如$./data/input.txt$是否存在) 3. **版本冲突**:确认运行环境版本(如Python 3.x与2.x的语法差异) $$代码逻辑问题$$ 1. **无限循环**:常见于递归未设终止条件 ```python def recursion(x): return recursion(x+1) # 缺少终止条件 ``` 2. **内存溢出**:检查大数据处理时是否超出限制 $$系统限制$$ 1. **超时设置**:默认执行时间限制通常为5-10秒 2. **资源配额**:单次运行可能限制CPU/内存使用量 $$调试建议$$ 1. 分阶段测试(输入/处理/输出模块单独验证) 2. 使用最小可重复样例: ```python print("Hello World") # 先验证基础执行能力 ``` 3. 查看控制台日志(通常包含$Error Code 137$等关键信息) $$典型错误模式$$ | 现象 | 可能原因 | 验证方法 | |------|---------|---------| | 无输出 | 代码提前终止 | 插入$print$调试语句 | | 部分输出 | 异步未等待 | 检查协程/线程同步 | | 错误代码126 | 权限问题 | $chmod +x script.sh$ | 建议提供以下信息以便精准定位: 1. 具体使用的编程语言(如$Python 3.8$) 2. 错误提示内容(包含特定错误码如$Segmentation Fault$) 3. 涉及特殊操作(如文件I/O、网络请求) 是否需要针对某个具体场景展开说明?可以提供更多上下文帮助分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值