栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python日志记录支持多处理吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python日志记录支持多处理吗?

正如Matino正确解释的那样:登录多处理设置并不安全,因为多个进程(对其他现有进程一无所知)正在写入同一文件,并且可能相互干扰。

现在发生的是,每个进程都拥有一个打开的文件句柄,并对该文件执行“追加写入”。问题是在什么情况下追加写入是“原子的”(也就是说,不能被其他进程写入同一文件并混合其输出而中断)。这个问题适用于每种编程语言,最后它们将对内核进行syscall。

归结为检查在

/usr/include/linux/limits.h
4096字节中定义的Linux上的管道缓冲区大小。对于其他操作系统,您可以在此处找到一个不错的列表。

这意味着:如果您的日志行少于4‘096字节(如果在Linux上),那么如果直接连接磁盘(即在两者之间没有网络),则附加文件是安全的。但有关更多详细信息,请检查我的答案中的第一个链接。要对此进行测试,可以

logger.info('procname %s id %s %s' % (proc.name, proc.pid,str(proc.name)*5000))
使用不同的长度。以5000为例,我已经弄混了日志行
/tmp/test.log

在这个问题中,已经有很多解决方案,因此在这里我不会添加自己的解决方案。

更新:烧瓶和多处理

如果由uwsgi或nginx托管,则烧瓶等Web框架将在多个工作程序中运行。在这种情况下,多个进程可能会写入一个日志文件。会有问题吗?

Flask中的错误处理是通过stdout /
stderr完成的,然后由网络服务器(uwsgi,nginx等)处理,该服务器需要注意以正确的方式写入日志(例如,参见[this flask +
nginx示例]))(http://flaviusim.com/blog/Deploying-Flask-with-nginx-uWSGI-and-
Supervisor/
),可能还添加了流程信息,以便您可以将错误行与流程相关联。从flasks
doc:

从Flask 0.11开始,默认情况下,错误会自动记录到Web服务器的日志中。但是警告不是。

因此,如果您使用日志

warn
消息超出管道缓冲区大小,则仍然会出现日志文件混杂的问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号