Centos 7 - Python 스크립트로 생성된 모든 스레드를 거부합니다.

Centos 7 - Python 스크립트로 생성된 모든 스레드를 거부합니다.

저는 Centos 7과 Python 3.6을 실행하고 있습니다.

멀티스레딩을 사용하는 Python 스크립트가 있습니다.

스크립트에서 생성된 모든 단계에 대해 좋은 값을 다시 조정하거나 변경하고 싶습니다.

현재 다음 명령을 사용하여 상위 프로세스의 올바른 값을 변경할 수 있습니다.

while read -r pid; do
renice -n -20 "$pid" ; done < <(ps -o pid= -C "python /path/script.py")

그런 다음 htop을 사용하여 스크립트 프로세스의 상태를 볼 때 상위 프로세스만 업데이트되거나 "reniced" 값을 표시합니다.

"하위" 프로세스는 모두 표준 양호한 값을 표시합니다(htop에서 F7 키를 사용하여 수동으로 변경할 수 있습니다).

여기와 온라인에서 몇 가지 유사한 질문을 찾았고 제안된 솔루션을 시도했지만 Centos 7에서는 작동하지 않는 것 같으므로 배포판에 따라 다를 수 있습니다.

누구든지 상위 및 하위 프로세스를 동시에 다시 시작할 수 있도록 위 명령을 수정하는 방법에 대한 올바른 방향을 알려주시겠습니까? 아니면 사용해야 하는 더 나은 솔루션이 있다면 기꺼이 시도해 보겠습니다. .

*** 이 스크립트는 Centos 7 호스트의 Centos 7 Docker 컨테이너에서 실행됩니다. Docker의 권한 문제로 인해 컨테이너에서 원하는 값으로 스크립트를 시작할 수 없으므로 호스트 컴퓨터에서 스크립트 프로세스를 다시 시작하고 위의 프로세스를 사용하여 이 작업을 수행할 수 있습니다.

답변1

가장 쉬운 방법은 renice를 통해 기본 스크립트를 호출하는 것입니다.


메인 프로세스의 모든 하위 프로세스를 찾아야 합니다. 루프가 필요하지 않으며 renice여러 매개변수를 허용합니다.

renice -n -20 $(ps --ppid $(ps -o pid= -C "python /path/script.py") --no-headers -o pid)

또는 읽기가 더 쉽습니다.

PPID=$(ps -o pid= -C "python /path/script.py")
renice -n -20 $(ps --ppid $PPID --no-headers -o pid)

답변2

이 질문에 대해 댓글을 달거나 답변을 주신 분들 덕분에 다음 명령을 사용하여 필요한 작업을 수행할 수 있었습니다.

ps --no-headers -eT | grep python | awk '$2 {system("renice -n -20 -p " $2)}'

이 명령은 모든 Python 프로세스를 찾아서 재구성합니다.

이것은 빠르고 더러운 솔루션이지만 시스템에서 실행되는 유일한 Python 프로세스는 내 script.py 파일이므로 필요한 작업을 수행할 것입니다...

* 갱신 *

시스템에서 실행 중인 다른 Python 프로세스가 있는 경우 문제가 발생할 수 있기 때문에 모든 Python 프로세스를 거부하는 것만으로는 만족스럽지 않았습니다. 그래서 일부 조사를 수행한 결과 이 ​​명령이 내 script.py 프로세스만 거부한다는 것을 발견했습니다.

 ps --no-headers -efT | grep "python /path/script.py" | awk '$3 {system("renice -n -17 -p " $3)}'

관련 정보