2016-08-11 2 views

ответ

0

WorkerTmp сердце бьется путь между Арбитром и работником. Каждый рабочий связан с одним tmp (экземпляр WorkerTmp), а WorkerTmp содержит tempfile (_tmp).

Как мы можем видеть, работник (например, sync.SyncWorker) будем называть WorkerTmp.notify интервально, который будет изменять метаданные информацию о TempFile, код, как показано ниже:

def notify(self): 
    try: 
     self.spinner = (self.spinner + 1) % 2 
     os.fchmod(self._tmp.fileno(), self.spinner) 
    except AttributeError: 
     # python < 2.6 
     self._tmp.truncate(0) 
     os.write(self._tmp.fileno(), b"X") 

Вернись Арбитра, арбитр проверьте, не потерял ли какой-либо работник соединение в основном цикле (arbiter.py:197). но как? в строке 477 в arbiter.py шоу:

if time.time() - worker.tmp.last_update() <= self.timeout: 

проверки интервала между сейчас и последний раз, когда обновление TempFile, в случае, если интервал больше, чем сконфигурированный таймаут, мы считаем, что работник потерял связь. Теперь ключевым моментом является метод tmp.last_update, код показывает все:

def last_update(self): 
    return os.fstat(self._tmp.fileno()).st_ctime 

os.fchmod изменит st_ctime файла. мы можем использовать «stat» для проверки трех временных атрибутов файла.

 Смежные вопросы

  • Нет связанных вопросов^_^