gpt4 book ai didi

python - 如何从多处理进程登录到 StringIO

转载 作者:行者123 更新时间:2023-12-05 07:14:28 28 4
gpt4 key购买 nike

我只是无法让 StreamHandler 与 StringIO 一起工作以接受来自进程的日志记录。奇怪的是,到 stdout 的流工作得很好。

这是我的代码:


from time import sleep
import logging
import multiprocessing
from io import StringIO


logBuffer = StringIO()
#logging.basicConfig(level=logging.DEBUG,stream=logBuffer)
logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')


def main():
for i in range(10):
logging.debug('i=%i' % i)
print(i)
sleep(0.5)

# start process
proc = multiprocessing.Process(target=main )
proc.start()
proc.join()

print(logBuffer.getvalue())
sleep(3)

使用logging.basicConfig(level=logging.DEBUG) 将所有内容打印到标准输出:

DEBUG:root:This will get loggedDEBUG:root:i=00DEBUG:root:i=11DEBUG:root:i=22DEBUG:root:i=33DEBUG:root:i=44DEBUG:root:i=55DEBUG:root:i=66DEBUG:root:i=77DEBUG:root:i=88DEBUG:root:i=99

尝试使用带有 logging.basicConfig(level=logging.DEBUG,stream=logBu​​ffer) 的 StringIO 进行捕获时,仅捕获当前的 ma​​in 输出:

0123456789DEBUG:root:This will get logged

有人可以帮忙吗?也欢迎将实时输出从进程传递到父进程的其他解决方案。

最佳答案

我在 logging-cookbook 中找到了答案,使用 QueueHandler,所以我将回答我自己的问题 (RTFM) ;-)。

然而,更简单的解决方案似乎是切换到线程并将记录器实例传递给 trhead 函数。

关于python - 如何从多处理进程登录到 StringIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59904596/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com