Почему я получаю предупреждения о ресурсах подпроцесса, несмотря на то, что процесс мертв?

Я думаю, что эта функция может быть простым решением:

function trunc(decimal,n=2){
  let x = decimal + ''; // string 
  return x.lastIndexOf('.')>=0?parseFloat(x.substr(0,x.lastIndexOf('.')+(n+1))):decimal; // You can use indexOf() instead of lastIndexOf()
}

console.log(trunc(-241.31234,2));
console.log(trunc(241.312,5));
console.log(trunc(-241.233));  
console.log(trunc(241));

5
задан Charlie Parker 7 March 2019 в 22:18
поделиться

1 ответ

Предупреждение ResourceWarning: subprocess N is still running исходит из метода __del__ класса subprocess.Popen.

Если вы посмотрите на источник для этого метода , вы увидите следующий комментарий:

        # Not reading subprocess exit status creates a zombie process which
        # is only destroyed at the parent python process exit
        _warn("subprocess %s is still running" % self.pid,
              ResourceWarning, source=self)

Решение состоит в том, чтобы вы вызвали wait() для дочернего процесса.

Дополнительную информацию см. В разделе ЗАМЕЧАНИЯ на странице руководства для wait(2) .

В Python самый простой способ справиться с этой ситуацией - отслеживать все созданные вами Popen объекты и гарантировать, что что-то вызывает wait() для них, прямо или косвенно. [+1121]

Кроме того, вы можете установить обработчик SIGCHLD, который игнорирует события SIGCHLD; тогда ваши дочерние процессы немедленно исчезнут, но теперь вы не сможете вызвать wait() для них. См. Также Как я могу предотвратить дочерние процессы зомби? и Как я могу обрабатывать SIGCHLD?

0
ответ дан Daniel Pryden 7 March 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: