Python:使用多处理将打印输出(stdout)重定向到日志记录

2024-09-28 05:18:24 发布

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

我正在开发一个python类,它使用我们自己开发的一些其他类/模块。在

我们在每个模块中使用一些打印来向用户提示一些信息(日志记录也用于获取更详细的信息)。 问题是当(子)模块被一个“主”类使用时,打印可能会变得太多,并隐藏了基本的主控信息。在我当前的应用程序中,“master”是一个遗传算法,它使用一个多处理子类(运行案例),这个子类还使用其他一些子类(运行非python代码、定义初始化数据等)。每个班级都会打印与该班级相关的信息,而我只想显示硕士生的信息。在

我试图改变方向系统标准输出以及系统标准去伐木。见下文我对一个简化例子的尝试。在

调用模块

from multiprocessing import Process

def send2disp(text) :
    print(text)
    return

def send2disp_mp(text) :
    workers = [Process(target=send2disp,args=(text+str(pi),)) for pi in range(2)]
    for ti in workers :
        ti.start()
    for ti in workers :
        ti.join()

if __name__ == '__main__':
    pass

主脚本

^{pr2}$

通过主脚本,我定义了一个日志文件,并将stdout/stderr重定向到该文件。然后我调用子模块的两个函数:

  • “send2disp”工作正常,打印输出将记录到日志中
  • “send2disp_mp”,而是继续向stdout发送打印输出…唯一的区别是使用了多处理,这应该是问题的根源。在

如何处理重定向标准输出和多处理? 提前谢谢。在


Tags: 模块textin信息for标准定义系统

热门问题