使用Queue&Listen登录控制台时出现意外行为

2024-06-01 01:12:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的项目中遇到了一些伐木巫毒。你知道吗

阅读以下内容后: QueueHandlerQueueListener

我将登录程序设计如下:在主进程中- 分配了QueueHandler的根记录器。该队列由QueueListener侦听,其目标是纯StreamHandler。 我的程序在某个执行点向进程池发送一个分析任务。 每个池进程都分配了在主进程的QueueHandler中创建的队列,因此它也可以将日志记录发送到控制台。你知道吗

请注意,我的程序是Python2程序,我从Python3手动向后移植了QueueHandler和QueueListener的代码。你知道吗

我的程序执行中出现了一个不一致的问题(但主要是在测试中): 程序被卡住,没有消息被打印到控制台。 如果StreamHandler与FileHandler交换-测试一致通过。你知道吗

以下是我用于测试的env:

解释器:PyPy 5.6.0和GCC 4.8.4

pytest版本:“3.2.3”

日志版本:“0.5.1.2”

uname-a:Linux ip-172-31-36-72 3.13.0-74-generic#118 Ubuntu SMP周四12月17日22:52:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

我认为共享github回购并不常见,但我将我的程序提取到一个非常小的项目中,这个问题(有时)会重现。请随意查看: log_voodoo

为什么会这样?有什么解决办法吗?你知道吗


Tags: 项目程序版本目标队列进程linux伐木
2条回答

如果不深入研究代码,您可能希望尝试使用pypy6.0,在这两个版本之间存在一些已修复的问题。你知道吗

您可以使用logutils项目,它将QueueHandler和QueueListener向后移植到python2.x

您应该设置:

  • 主进程-仅配置QueueListener和StreamHandler
  • Workers-仅限QueueHandler

理想情况下,工作者应该自己创建和添加QueueHandler,而不是依赖于从主进程继承它(如果他们是从主进程派生的)。日志记录食谱有一个example setup(工作代码,AFAIK)。你知道吗

相关问题 更多 >