Как я могу использовать регистрацию Python в Ray? - PullRequest
1 голос
/ 21 марта 2019

Я использую модуль регистрации в основной функции / процессе, он работает хорошо, но, похоже, не может работать в процессе / подпроцессоре 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")

1 Ответ

0 голосов
/ 21 марта 2019

Есть пара вещей, о которых нужно быть осторожными.

  • Во-первых, вы должны создать новый регистратор внутри рабочего, потому что рабочий работает в другом процессе Python. Если вы попытаетесь использовать регистратор, который вы создали вне рабочего в пределах рабочего, то Рэй попытается выбрать логгер и отправить его в рабочий процесс, и регистраторы 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")
...