当前位置 博文首页 > 多进程打印日志_weixin_39717152的博客:python多进程打印输出

    多进程打印日志_weixin_39717152的博客:python多进程打印输出

    作者:[db:作者] 时间:2021-09-12 12:10

    多进程的日志和多线程的日志有一点区别。原因是 Python 的 logging 包不支持进程共享锁,所以来自不同的进程的日志可能会混在一起。我们尝试一下在上边的例子里加一个基础日志。下边是代码:import?loggingimport?multiprocessingfrom?multiprocessing?import?Process,?Lockdef?printer(item,?lock):

    """????Prints?out?the?item?that?was?passed?in????"""

    lock.acquire()

    try:

    print(item)

    finally:

    lock.release()if?__name__?==?'__main__':

    lock?=?Lock()

    items?=?['tango',?'foxtrot',?10]

    multiprocessing.log_to_stderr()

    logger?=?multiprocessing.get_logger()

    logger.setLevel(logging.INFO)

    for?item?in?items:

    p?=?Process(target=printer,?args=(item,?lock))

    p.start()

    记录日志最简单的方法是将所有的日志发送给 stderr 。我们可以通过调用函数?log_to_stderr?来实现。然后我们调用?get_logger?函数得到记录器(logger),并把日志级别设置为 INFO。剩下的代码和原来一样。这里要说明一下,我并没有用?join()?函数。相反, 父线程在退出的时候要显式地调用?join()。

    当你运行上边的代码,会得到像下面这样的输出:[INFO/Process-1]?child?process?calling?self.run()

    tango

    [INFO/Process-1]?process?shutting?down

    [INFO/Process-1]?process?exiting?with?exitcode?0

    [INFO/Process-2]?child?process?calling?self.run()

    [INFO/MainProcess]?process?shutting?down

    foxtrot

    [INFO/Process-2]?process?shutting?down

    [INFO/Process-3]?child?process?calling?self.run()

    [INFO/Process-2]?process?exiting?with?exitcode?0

    10

    [INFO/MainProcess]?calling?join()?for?process?Process-3

    [INFO/Process-3]?process?shutting?down

    [INFO/Process-3]?process?exiting?with?exitcode?0

    [INFO/MainProcess]?calling?join()?for?process?Process-2

    现在你如果想把日志保存到硬盘,其实还有有些复杂的。你可以参考Python 的官方实例。

    cs
    下一篇:没有了