python - 如何在 Ray 中使用 python 日志记录?

标签 python logging ray

我在主函数/进程中使用了日志模块,它运行良好,但在Actor进程/子进程中似乎无法运行。如何让它发挥作用?在下面的代码示例中,logging.info 在主进程中工作,但在工作进程中失败。谢谢。

import logging
import ray

@ray.remote
class Worker(object):
   ...

   def train(self):
       logging.info("fail print")


...

worker = Worker.remote()

ray.get(worker.train.remote())

logging.info("successful print")

最佳答案

有几件事需要注意。

  • 首先,您应该在 worker 内部创建一个新的记录器,因为 worker 在不同的 Python 进程上运行。如果您尝试使用您在工作人员中在工作人员之外创建的记录器,那么 Ray 将尝试腌制记录器并将其发送到工作进程,而 Python 记录器在腌制和取消腌制时通常不会正确运行。
  • 其次,您必须确保正确设置了日志记录级别。我正在使用 logger.warning而不是 logger.info因为 Python 的日志记录级别默认设置为 `warning。

  • 这是一个工作示例:
    import logging
    import ray
    
    logger = logging.getLogger(__name__)
    
    @ray.remote
    class Worker(object):
        def __init__(self):
            self.logger = logging.getLogger(__name__)
        def train(self):
            self.logger.warning("print from inside worker")
    
    
    ray.init()
    
    worker = Worker.remote()
    
    ray.get(worker.train.remote())
    
    logger.warning("print from outside worker")
    

    关于python - 如何在 Ray 中使用 python 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55272066/

    相关文章:

    java - 如何强制第 3 方实现/继承类在 java 中运行泛型方法?

    iphone - iPhone 上的访问崩溃日志数据

    python - 具有多个返回并调用 ray.get() 的 Ray python 示例

    python - 更改 Ray RLlib Training 的 Logdir 而不是 ~/ray_results

    python - Ray actor 的一个实例只在一个进程中运行吗?

    python - 如何为函数中的参数赋予类型

    python - 我的 RDS 有指向存储在 s3 中的图像的链接 如何在 lambda python 函数中将该链接转换为图像

    Python代码不能使用系统变量

    python - 删除超过 70% 零的列

    java - 从 logback 配置文件中读取环境变量