python - 如何在 Ray 中使用 python 日志记录?
问题描述
我在主函数/进程中使用了日志模块,它运行良好,但在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 日志记录级别默认设置为“警告”。
这是一个工作示例:
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")
推荐阅读
- javascript - 使用 javascript 和 php (NO jQuery) 与 mysql 服务器 (MariaDB) 安全通信
- ios - Swift - Locksmith loadDataForUserAccount 有时会失败?
- java - recyclerview 的 notifyItemInserted 插入错误的位置
- dask - 如何在 Dask 中为 GroupBy 添加自定义聚合函数?例如平均值、众数、中位数、第 95 个百分位数等
- flutter - centerTitle 和 TextAlign.centre 有什么区别?
- java - 图像加载和上传到 Firebase 存储无法在 android 和 firebase 控制台中显示“错误加载预览”
- c - 用于在 C 中打印 uknown 大小的二维数组的函数
- alexa-skill - 带有 Jovo 框架的 Alexa 语音:这可以通过话语获得 IntentName 吗?如何根据用户话语决定跳转到哪个意图?
- angular - primeng 树,p-tree 默认扩展和选择节点,突出显示不起作用
- angular - 在一个地方导入所有文件时,sass 变量在 Ionic-4 中不起作用